﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-大網里的生活，与工作</title><link>http://www.blogjava.net/sbtvij/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 19 Jun 2026 01:36:14 GMT</lastBuildDate><pubDate>Fri, 19 Jun 2026 01:36:14 GMT</pubDate><ttl>60</ttl><item><title>Oracle EBS:PO 常用的查询及Tips </title><link>http://www.blogjava.net/sbtvij/articles/345097.html</link><dc:creator>神話</dc:creator><author>神話</author><pubDate>Thu, 24 Feb 2011 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/sbtvij/articles/345097.html</guid><wfw:comment>http://www.blogjava.net/sbtvij/comments/345097.html</wfw:comment><comments>http://www.blogjava.net/sbtvij/articles/345097.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sbtvij/comments/commentRss/345097.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sbtvij/services/trackbacks/345097.html</trackback:ping><description><![CDATA[原文:PO: Tips and useful Query<br />
作者:Sanjit Anand<br />
来源:<a href="http://www.oracleappshub.com/oracle-purchasing/po-tips-and-useful-query/" target="_blank" rel="external">http://www.oracleappshub.com/oracle-purchasing/po-tips-and-useful-query/</a><br />
<br />
1.列出没有销售订单的内部采购订单<br />
<br />
<div class="UBBPanel codePanel">
<div class="UBBTitle"><a style="float: right; cursor: pointer; font-weight: normal; font-style: normal;">复制内容到剪贴板</a><img src="http://www.dezai.cn/blog/images/code.gif" style="margin: 0px 2px -3px 0px;" alt="程序代码" /> 程序代码</div>
<div class="UBBContent" id="code32835"><br />
---used to list all Internal Requisitions that do not have an&nbsp;&nbsp;associated Internal Sales order<br />
Select RQH.SEGMENT1 REQ_NUM,<br />
RQL.LINE_NUM,<br />
RQL.REQUISITION_HEADER_ID ,<br />
RQL.REQUISITION_LINE_ID,<br />
RQL.ITEM_ID ,<br />
RQL.UNIT_MEAS_LOOKUP_CODE ,<br />
RQL.UNIT_PRICE ,<br />
RQL.QUANTITY ,<br />
RQL.QUANTITY_CANCELLED,<br />
RQL.QUANTITY_DELIVERED ,<br />
RQL.CANCEL_FLAG ,<br />
RQL.SOURCE_TYPE_CODE ,<br />
RQL.SOURCE_ORGANIZATION_ID ,<br />
RQL.DESTINATION_ORGANIZATION_ID,<br />
RQH.TRANSFERRED_TO_OE_FLAG<br />
from<br />
PO_REQUISITION_LINES_ALL RQL, PO_REQUISITION_HEADERS_ALL RQH<br />
where<br />
RQL.REQUISITION_HEADER_ID = RQH.REQUISITION_HEADER_ID<br />
and RQL.SOURCE_TYPE_CODE = 'INVENTORY'<br />
and RQL.SOURCE_ORGANIZATION_ID is not null<br />
and not exists (select 'existing internal order'<br />
from OE_ORDER_LINES_ALL LIN<br />
where LIN.SOURCE_DOCUMENT_LINE_ID = RQL.REQUISITION_LINE_ID<br />
and LIN.SOURCE_DOCUMENT_TYPE_ID = 10)<br />
orDER BY RQH.REQUISITION_HEADER_ID, RQL.LINE_NUM;<br />
<br />
</div>
</div>
<br />
<br />
2.关联PR的PO<br />
<br />
<div class="UBBPanel codePanel">
<div class="UBBTitle"><a style="float: right; cursor: pointer; font-weight: normal; font-style: normal;">复制内容到剪贴板</a><img src="http://www.dezai.cn/blog/images/code.gif" style="margin: 0px 2px -3px 0px;" alt="程序代码" /> 程序代码</div>
<div class="UBBContent" id="code9999"><br />
-----Relation with Requistion and PO<br />
select r.segment1 "Req Num",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p.segment1 "PO Num"<br />
from po_headers_all p, <br />
po_distributions_all d,<br />
po_req_distributions_all rd, <br />
po_requisition_lines_all rl,<br />
po_requisition_headers_all r <br />
where p.po_header_id = d.po_header_id <br />
and d.req_distribution_id = rd.distribution_id <br />
and rd.requisition_line_id = rl.requisition_line_id <br />
and rl.requisition_header_id = r.requisition_header_id <br />
<br />
</div>
</div>
<br />
<br />
<br />
3.所有取消的PR<br />
<br />
<div class="UBBPanel codePanel">
<div class="UBBTitle"><a style="float: right; cursor: pointer; font-weight: normal; font-style: normal;">复制内容到剪贴板</a><img src="http://www.dezai.cn/blog/images/code.gif" style="margin: 0px 2px -3px 0px;" alt="程序代码" /> 程序代码</div>
<div class="UBBContent" id="code5063"><br />
-----list My cancel Requistion<br />
select prh.REQUISITION_HEADER_ID,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prh.PREPARER_ID ,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prh.SEGMENT1 "REQ NUM",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trunc(prh.CREATION_DATE),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prh.DESCRIPTION,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prh.NOTE_TO_AUTHORIZER<br />
from apps.Po_Requisition_headers_all prh,<br />
&nbsp;&nbsp;&nbsp;&nbsp; apps.po_action_history pah <br />
where Action_code='CANCEL' <br />
and pah.object_type_code='REQUISITION' <br />
and pah.object_id=prh.REQUISITION_HEADER_ID <br />
<br />
</div>
</div>
<br />
<br />
<br />
4.没有PO的Pr<br />
<div class="UBBPanel codePanel">
<div class="UBBTitle"><a style="float: right; cursor: pointer; font-weight: normal; font-style: normal;">复制内容到剪贴板</a><img src="http://www.dezai.cn/blog/images/code.gif" style="margin: 0px 2px -3px 0px;" alt="程序代码" /> 程序代码</div>
<div class="UBBContent" id="code93314"><br />
-----list all Purchase Requisition without a Purchase order that means&nbsp;&nbsp;a PR has not been autocreated to PO.<br />
&nbsp;&nbsp;select <br />
&nbsp;&nbsp;prh.segment1 "PR NUM", <br />
&nbsp;&nbsp;trunc(prh.creation_date) "CreateD ON", <br />
&nbsp;&nbsp;trunc(prl.creation_date) "Line Creation Date" ,<br />
&nbsp;&nbsp;prl.line_num "Seq #", <br />
&nbsp;&nbsp;msi.segment1 "Item Num", <br />
&nbsp;&nbsp;prl.item_description "Description", <br />
&nbsp;&nbsp;prl.quantity "Qty", <br />
&nbsp;&nbsp;trunc(prl.need_by_date) "Required By", <br />
&nbsp;&nbsp;ppf1.full_name "REQUESTOR", <br />
&nbsp;&nbsp;ppf2.agent_name "BUYER" <br />
&nbsp;&nbsp;from <br />
&nbsp;&nbsp;po.po_requisition_headers_all prh, <br />
&nbsp;&nbsp;po.po_requisition_lines_all prl, <br />
&nbsp;&nbsp;apps.per_people_f ppf1, <br />
&nbsp;&nbsp;(select distinct agent_id,agent_name from apps.po_agents_v ) ppf2, <br />
&nbsp;&nbsp;po.po_req_distributions_all prd, <br />
&nbsp;&nbsp;inv.mtl_system_items_b msi, <br />
&nbsp;&nbsp;po.po_line_locations_all pll, <br />
&nbsp;&nbsp;po.po_lines_all pl, <br />
&nbsp;&nbsp;po.po_headers_all ph <br />
&nbsp;&nbsp;Where <br />
&nbsp;&nbsp;prh.requisition_header_id = prl.requisition_header_id <br />
&nbsp;&nbsp;and prl.requisition_line_id = prd.requisition_line_id <br />
&nbsp;&nbsp;and ppf1.person_id = prh.preparer_id <br />
&nbsp;&nbsp;and prh.creation_date between ppf1.effective_start_date and ppf1.effective_end_date <br />
&nbsp;&nbsp;and ppf2.agent_id(+) = msi.buyer_id <br />
&nbsp;&nbsp;and msi.inventory_item_id = prl.item_id <br />
&nbsp;&nbsp;and msi.organization_id = prl.destination_organization_id <br />
&nbsp;&nbsp;and pll.line_location_id(+) = prl.line_location_id <br />
&nbsp;&nbsp;and pll.po_header_id = ph.po_header_id(+) <br />
&nbsp;&nbsp;AND PLL.PO_LINE_ID = PL.PO_LINE_ID(+) <br />
&nbsp;&nbsp;AND PRH.AUTHORIZATION_STATUS = 'APPROVED' <br />
&nbsp;&nbsp;AND PLL.LINE_LOCATION_ID IS NULL <br />
&nbsp;&nbsp;AND PRL.CLOSED_CODE IS NULL <br />
&nbsp;&nbsp;AND NVL(PRL.CANCEL_FLAG,'N') &lt;&gt; 'Y'<br />
&nbsp;&nbsp;orDER BY 1,2<br />
<br />
</div>
</div>
<br />
<br />
<br />
5.在PR转PO过程中的(应该是自动创建里面的数据吧)<br />
<div class="UBBPanel codePanel">
<div class="UBBTitle"><a style="float: right; cursor: pointer; font-weight: normal; font-style: normal;">复制内容到剪贴板</a><img src="http://www.dezai.cn/blog/images/code.gif" style="margin: 0px 2px -3px 0px;" alt="程序代码" /> 程序代码</div>
<div class="UBBContent" id="code28562"><br />
----- List and all data entry from PR till PO<br />
<br />
select distinct u.description "Requestor", <br />
porh.segment1 as "Req Number", <br />
trunc(porh.Creation_Date) "Created On", <br />
pord.LAST_UpdateD_BY, <br />
porh.Authorization_Status "Status", <br />
porh.Description "Description", <br />
poh.segment1 "PO Number", <br />
trunc(poh.Creation_date) "PO Creation Date", <br />
poh.AUTHORIZATION_STATUS "PO Status", <br />
trunc(poh.Approved_Date) "Approved Date"<br />
from apps.po_headers_all poh, <br />
apps.po_distributions_all pod, <br />
apps.po_req_distributions_all pord, <br />
apps.po_requisition_lines_all porl, <br />
apps.po_requisition_headers_all porh, <br />
apps.fnd_user u <br />
where porh.requisition_header_id = porl.requisition_header_id <br />
and porl.requisition_line_id = pord.requisition_line_id <br />
and pord.distribution_id = pod.req_distribution_id(+) <br />
and pod.po_header_id = poh.po_header_id(+) <br />
and porh.created_by = u.user_id<br />
order by 2 <br />
<br />
</div>
</div>
<br />
<br />
<br />
6.没有自动创建PO成功的PR<br />
<br />
<div class="UBBPanel codePanel">
<div class="UBBTitle"><a style="float: right; cursor: pointer; font-weight: normal; font-style: normal;">复制内容到剪贴板</a><img src="http://www.dezai.cn/blog/images/code.gif" style="margin: 0px 2px -3px 0px;" alt="程序代码" /> 程序代码</div>
<div class="UBBContent" id="code22817">-----list all Purchase Requisition without a Purchase order that means&nbsp;&nbsp;a PR has not been autocreated to PO.<br />
&nbsp;&nbsp;select <br />
&nbsp;&nbsp;prh.segment1 "PR NUM", <br />
&nbsp;&nbsp;trunc(prh.creation_date) "CreateD ON", <br />
&nbsp;&nbsp;trunc(prl.creation_date) "Line Creation Date" ,<br />
&nbsp;&nbsp;prl.line_num "Seq #", <br />
&nbsp;&nbsp;msi.segment1 "Item Num", <br />
&nbsp;&nbsp;prl.item_description "Description", <br />
&nbsp;&nbsp;prl.quantity "Qty", <br />
&nbsp;&nbsp;trunc(prl.need_by_date) "Required By", <br />
&nbsp;&nbsp;ppf1.full_name "REQUESTOR", <br />
&nbsp;&nbsp;ppf2.agent_name "BUYER" <br />
&nbsp;&nbsp;from <br />
&nbsp;&nbsp;po.po_requisition_headers_all prh, <br />
&nbsp;&nbsp;po.po_requisition_lines_all prl, <br />
&nbsp;&nbsp;apps.per_people_f ppf1, <br />
&nbsp;&nbsp;(select distinct agent_id,agent_name from apps.po_agents_v ) ppf2, <br />
&nbsp;&nbsp;po.po_req_distributions_all prd, <br />
&nbsp;&nbsp;inv.mtl_system_items_b msi, <br />
&nbsp;&nbsp;po.po_line_locations_all pll, <br />
&nbsp;&nbsp;po.po_lines_all pl, <br />
&nbsp;&nbsp;po.po_headers_all ph <br />
&nbsp;&nbsp;Where <br />
&nbsp;&nbsp;prh.requisition_header_id = prl.requisition_header_id <br />
&nbsp;&nbsp;and prl.requisition_line_id = prd.requisition_line_id <br />
&nbsp;&nbsp;and ppf1.person_id = prh.preparer_id <br />
&nbsp;&nbsp;and prh.creation_date between ppf1.effective_start_date and ppf1.effective_end_date <br />
&nbsp;&nbsp;and ppf2.agent_id(+) = msi.buyer_id <br />
&nbsp;&nbsp;and msi.inventory_item_id = prl.item_id <br />
&nbsp;&nbsp;and msi.organization_id = prl.destination_organization_id <br />
&nbsp;&nbsp;and pll.line_location_id(+) = prl.line_location_id <br />
&nbsp;&nbsp;and pll.po_header_id = ph.po_header_id(+) <br />
&nbsp;&nbsp;AND PLL.PO_LINE_ID = PL.PO_LINE_ID(+) <br />
&nbsp;&nbsp;AND PRH.AUTHORIZATION_STATUS = 'APPROVED' <br />
&nbsp;&nbsp;AND PLL.LINE_LOCATION_ID IS NULL <br />
&nbsp;&nbsp;AND PRL.CLOSED_CODE IS NULL <br />
&nbsp;&nbsp;AND NVL(PRL.CANCEL_FLAG,'N') &lt;&gt; 'Y'<br />
&nbsp;&nbsp;orDER BY 1,2<br />
</div>
</div>
<br />
<br />
7.PR与PO的关联表<br />
<br />
<span style="color: Purple;">PO_DISTRIBUTIONS_ALL =&gt;PO_HEADER_ID, REQ_DISTRIBUTION_ID<br />
PO_HEADERS_ALL=&gt;PO_HEADER_ID, SEGMENT1<br />
PO_REQ_DISTRIBUTIONS_ALL =&gt;DISTRIBUTION_ID, REQUISITION_LINE_ID<br />
PO_REQUISITION_LINES_ALL =&gt;REQUISITION_LINE_ID)<br />
PO_REQUISITION_HEADERS_ALL =&gt;REQUISITION_HEADER_ID, REQUISITION_LINE_ID, SEGMENT1</span><br />
<br />
What
you have to make a join on PO_DISTRIBUTIONS_ALL (REQ_DISTRIBUTION_ID)
and PO_REQ_DISTRIBUTIONS_ALL (DISTRIBUTION_ID) to see if there is a PO
for the req.<br />
<br />
你要做的就是将PO_DISTRIBUTIONS_ALL的REQ_DISTRIBUTION_ID与PO_REQ_DISTRIBUTIONS_ALL中的DISTRIBUTION_ID关联，查看看PR是否有对应的PO<br />
<br />
<br />
8.未结PO<br />
<br />
<div class="UBBPanel codePanel">
<div class="UBBTitle"><a style="float: right; cursor: pointer; font-weight: normal; font-style: normal;">复制内容到剪贴板</a><img src="http://www.dezai.cn/blog/images/code.gif" style="margin: 0px 2px -3px 0px;" alt="程序代码" /> 程序代码</div>
<div class="UBBContent" id="code66610"><br />
----- List all open PO'S<br />
select <br />
h.segment1 "PO NUM", <br />
h.authorization_status "STATUS", <br />
l.line_num "SEQ NUM", <br />
ll.line_location_id, <br />
d.po_distribution_id , <br />
h.type_lookup_code "TYPE" <br />
from <br />
po.po_headers_all h, <br />
po.po_lines_all l, <br />
po.po_line_locations_all ll, <br />
po.po_distributions_all d <br />
where h.po_header_id = l.po_header_id <br />
and ll.po_line_id = l.po_Line_id <br />
and ll.line_location_id = d.line_location_id <br />
and h.closed_date is null <br />
and h.type_lookup_code not in ('QUOTATION') <br />
<br />
</div>
</div>
<br />
<br />
9.List and PO With there approval , invoice and payment details<br />
<br />
<div class="UBBTitle"><a style="float: right; cursor: pointer; font-weight: normal; font-style: normal;">复制内容到剪贴板</a><img src="http://www.dezai.cn/blog/images/code.gif" style="margin: 0px 2px -3px 0px;" alt="程序代码" /> 程序代码</div>
<br />
----- List and PO With there approval , invoice and payment details<br />
select <br />
a.org_id "ORG ID", <br />
E.SEGMENT1 "VENDOR NUM",<br />
e.vendor_name "SUPPLIER NAME",<br />
UPPER(e.vendor_type_lookup_code) "VENDOR TYPE", <br />
f.vendor_site_code "VENDOR SITE CODE",<br />
f.ADDRESS_LINE1 "ADDRESS",<br />
f.city "CITY",<br />
f.country "COUNTRY", <br />
to_char(trunc(d.CREATION_DATE)) "PO Date", <br />
d.segment1 "PO NUM",<br />
d.type_lookup_code "PO Type", <br />
c.quantity_ordered "QTY orDERED", <br />
c.quantity_cancelled "QTY CANCELLED", <br />
g.item_id "ITEM ID" , <br />
g.item_description "ITEM DESCRIPTION",<br />
g.unit_price "UNIT PRICE", <br />
(NVL(c.quantity_ordered,0)-NVL(c.quantity_cancelled,0))*NVL(g.unit_price,0) "PO Line Amount", <br />
(select <br />
decode(ph.approved_FLAG, 'Y', 'Approved') <br />
from po.po_headers_all ph <br />
where ph.po_header_ID = d.po_header_id)"PO Approved?", <br />
a.invoice_type_lookup_code "INVOICE TYPE",<br />
a.invoice_amount "INVOICE AMOUNT", <br />
to_char(trunc(a.INVOICE_DATE)) "INVOICE DATE", <br />
a.invoice_num "INVOICE NUMBER", <br />
(select <br />
decode(x.MATCH_STATUS_FLAG, 'A', 'Approved') <br />
from ap.ap_invoice_distributions_all x <br />
where x.INVOICE_DISTRIBUTION_ID = b.invoice_distribution_id)"Invoice Approved?", <br />
a.amount_paid,<br />
h.amount, <br />
h.check_id, <br />
h.invoice_payment_id "Payment Id", <br />
i.check_number "Cheque Number", <br />
to_char(trunc(i.check_DATE)) "PAYMENT DATE" <br />
<br />
FROM AP.AP_INVOICES_ALL A, <br />
AP.AP_INVOICE_DISTRIBUTIONS_ALL B, <br />
PO.PO_DISTRIBUTIONS_ALL C, <br />
PO.PO_HEADERS_ALL D, <br />
PO.PO_VENDORS E, <br />
PO.PO_VENDOR_SITES_ALL F, <br />
PO.PO_LINES_ALL G, <br />
AP.AP_INVOICE_PAYMENTS_ALL H, <br />
AP.AP_CHECKS_ALL I <br />
where a.invoice_id = b.invoice_id <br />
and b.po_distribution_id = c. po_distribution_id (+) <br />
and c.po_header_id = d.po_header_id (+) <br />
and e.vendor_id (+) = d.VENDOR_ID <br />
and f.vendor_site_id (+) = d.vendor_site_id <br />
and d.po_header_id = g.po_header_id <br />
and c.po_line_id = g.po_line_id <br />
and a.invoice_id = h.invoice_id <br />
and h.check_id = i.check_id <br />
and f.vendor_site_id = i.vendor_site_id <br />
and c.PO_HEADER_ID is not null <br />
and a.payment_status_flag = 'Y' <br />
and d.type_lookup_code != 'BLANKET'<img src ="http://www.blogjava.net/sbtvij/aggbug/345097.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sbtvij/" target="_blank">神話</a> 2011-02-24 22:50 <a href="http://www.blogjava.net/sbtvij/articles/345097.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Orcale ERP 接口</title><link>http://www.blogjava.net/sbtvij/articles/340545.html</link><dc:creator>神話</dc:creator><author>神話</author><pubDate>Mon, 13 Dec 2010 12:43:00 GMT</pubDate><guid>http://www.blogjava.net/sbtvij/articles/340545.html</guid><description><![CDATA[1.请购单：<br />
po_requisition_headers_all&nbsp;&nbsp;&nbsp; --请购单头<br />
po_requisition_headers_all&nbsp;&nbsp;&nbsp; --请购单行
<p>2.订单和一揽子协议：<br />
--erp标准接口表<br />
select * from Po_Headers_Interface where attribute8=327 <br />
select * from Po_Lines_Interface</p>
<p>--erp最终业务表<br />
select * from Po_Headers_All where segment1='2007074733'<br />
select * from Po_Lines_All where po_header_id=235600<br />
po.PO_DISTRIBUTIONS_ALL&nbsp; 分配行,就是订单头和订单行的唯一<br />
po.po_line_locations_all 发运行</p>
<p>3.接收：<br />
erp接口表:Rcv_Headers_Interface/Rcv_Transactions_Interface<br />
erp业务表:po.rcv_shipment_headers/lines,po.rcv_transactions,</p>
<p>接收会计分录表：<br />
Po.Rcv_Receiving_Sub_Ledger</p>
<p>4.交货：<br />
erp接口表:Rcv_Transactions_Interface<br />
erp业务表:po.rcv_transactions<br />
交货后会写入库存：Mtl_Onhand_Quantities,apps.Mtl_Onhand_Sub_v,mtl_onhand_items_v</p>
<p>5.发料：<br />
erp接口表:Mtl_Transactions_Interface<br />
erp业务表:WIP_REQUIREMENT_OPERATIONS,apps.Mtl_Onhand_Sub_v<br />
错误表：Mtl_Transactions_Interface[error_code,error_explanation]</p>
<p>6.发票：<br />
发票标准接口表头体<br />
select * from ap.ap_invoices_interface where invoice_num like
'01685085~5095%'&nbsp; --01685131~5138'&nbsp; --06279214/06279328'&nbsp;&nbsp; --GM0009'<br />
select * from ap.ap_invoice_lines_interface where invoice_id=26085</p>
<p>最终发票头体<br />
ap.ap_invoices_all发票头<br />
ap.ap_invoice_distributions_all发票体</p>
<p>发票拒绝错误信息表：select * from AP_INTERFACE_REJECTIONS</p>
<p>创建会计分录表：<br />
Ap.Ap_Ae_Headers_All<br />
Ap.Ap_Ae_Lines_All&nbsp;</p>
<p>7.付款：<br />
付款头,对应发票头<br />
select * from ap.ap_invoice_payments_all where invoice_id in(89991)<br />
付款行，对应发票行<br />
select * from ap.ap_payment_distributions_all gg where gg.invoice_payment_id =</p>
<p>8.总帐<br />
gl.gl_interface总帐接收表<br />
ERP标准接口表<br />
select&nbsp; *&nbsp; from gl.gl_interface t where --t.accounting_date &gt;= to_date('2006-01-01','YYYY-MM-DD')&nbsp; and <br />
user_je_source_name='GMCCBMS'</p>
<p>ERP总帐最终业务表：<br />
GL_JE_HEADERS<br />
gl_je_lines</p>
<p><br />
获取从应付发票导入总帐的错误发票<br />
select * from ap.ap_invoices_all where invoice_num in(<br />
select distinct reference25 from gl.gl_interface where status='EC12' )</p>
<p>会计科目表：<br />
Gl.Gl_Code_Combinations</p>
<p>通过会计科目段找到对应的id<br />
Select * From gl_code_combinations_kfv k<br />
Where k.concatenated_segments = '3821.0.123203.0.0.0.0'</p>
<p>9.需求更改：<br />
接口表:Wip_Job_Dtls_Interface<br />
错误表：wip_interface_errors_v</p>
<p>10.工序移动：包括<br />
线圈工序移动、返回<br />
总装工序移动、返回<br />
接口表:WIP_MOVE_TXN_INTERFACE<br />
错误表：wip_txn_interface_errors[error_column,error_message]</p>
<p>11.完工入库：包括<br />
线圈完工入库<br />
线圈完工返回<br />
总装完工入库<br />
总装完工返回<br />
库存转移</p>
<p>接口表:MTL_TRANSACTIONS_INTERFACE<br />
错误表：Mtl_Transactions_Interface[error_code,error_explanation]</p>
<p><br />
基础表：<br />
po_vendors&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --供应商<br />
po_vendor_sites_all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --供应商地址<br />
po_vendor_contacts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --供应商联系人<br />
Mtl_System_Items_b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --物料<br />
ap.ap_terms_lines&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --付款方式<br />
per_people_f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --人员<br />
wip.wip_entities&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --工单<br />
Po.Po_Agents&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --采购员<br />
Apps.Fnd_User&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --用户<br />
apps.fnd_currencies_vl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --币种<br />
apps.org_acct_periods_v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --库存会计期<br />
apps.gl_period_statuses&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --PO会计期<br />
Gl_Period_Statuses&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --总帐会计期<br />
Bom_Bill_Of_Materials&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --bom清单</p><img src ="http://www.blogjava.net/sbtvij/aggbug/340545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sbtvij/" target="_blank">神話</a> 2010-12-13 20:43 <a href="http://www.blogjava.net/sbtvij/articles/340545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle-DECODE函数用法[摘]</title><link>http://www.blogjava.net/sbtvij/articles/339350.html</link><dc:creator>神話</dc:creator><author>神話</author><pubDate>Mon, 29 Nov 2010 14:49:00 GMT</pubDate><guid>http://www.blogjava.net/sbtvij/articles/339350.html</guid><wfw:comment>http://www.blogjava.net/sbtvij/comments/339350.html</wfw:comment><comments>http://www.blogjava.net/sbtvij/articles/339350.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sbtvij/comments/commentRss/339350.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sbtvij/services/trackbacks/339350.html</trackback:ping><description><![CDATA[<div class="bct fc05 fc11 nbw-blog ztag js-fs2">
<p style="text-indent: 2em;">含义解释： <br />
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)</p>
<p style="text-indent: 2em;">该函数的含义如下：<br />
IF 条件=值1 THEN<br />
RETURN(翻译值1)<br />
ELSIF 条件=值2 THEN<br />
RETURN(翻译值2)<br />
......<br />
ELSIF 条件=值n THEN<br />
RETURN(翻译值n)<br />
ELSE<br />
RETURN(缺省值)<br />
END IF<br />
decode(字段或字段的运算，值1，值2，值3）</p>
<p style="text-indent: 2em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个函数运行的结果是，当字段或字段的运算的值等于值1时，该函数返回值2，否则返回值3<br />
&nbsp;当然值1，值2，值3也可以是表达式，这个函数使得某些sql语句简单了许多<br />
</p>
<p style="text-indent: 2em;">使用方法： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、比较大小<br />
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值<br />
sign()函数根据某个值是0、正数还是负数，分别返回0、1、-1<br />
例如：<br />
变量1=10，变量2=20<br />
则sign(变量1-变量2)返回-1，decode解码结果为&#8220;变量1&#8221;，达到了取较小值的目的</p>
<p style="text-indent: 2em;">2、此函数用在SQL语句中，功能介绍如下： </p>
<p style="text-indent: 2em;">Decode函数与一系列嵌套的
IF-THEN-ELSE语句相似。base_exp与compare1,compare2等等依次进行比较。如果base_exp和 第i
个compare项匹配，就返回第i 个对应的value
。如果base_exp与任何的compare值都不匹配，则返回default。每个compare值顺次求值，如果发现一个匹配，则剩下的
compare值（如果还有的话）就都不再求值。一个为NULL的base_exp被认为和NULL
compare值等价。如果需要的话，每一个compare值都被转换成和第一个compare 值相同的数据类型，这个数据类型也是返回值的类型。&nbsp;&nbsp;</p>
<p style="text-indent: 2em;">Decode函数在实际开发中非常的有用</p>
<p style="text-indent: 2em;">结合Lpad函数，如何使主键的值自动加1并在前面补0<br />
select LPAD(decode(count(记录编号),0,1,max(to_number(记录编号)+1)),14,'0') 记录编号 from tetdmis</p>
eg:
<p style="text-indent: 2em;">select decode(dir,1,0,1) from a1_interval</p>
<p style="text-indent: 2em;">dir 的值是1变为0，是0则变为1 </p>
比如我要查询某班男生和女生的数量分别是多少?
<p style="text-indent: 2em;">通常我们这么写:</p>
<p style="text-indent: 2em;">select count(*) from 表 where 性别 ＝ 男；</p>
<p style="text-indent: 2em;">select count(*) from 表 where 性别 ＝ 女；</p>
<p style="text-indent: 2em;">要想显示到一起还要union一下，太麻烦了</p>
<p style="text-indent: 2em;">用decode呢，只需要一句话</p>
<p style="text-indent: 2em;">select decode(性别，男，1，0），decode(性别，女，1，0） from 表</p>
</div><img src ="http://www.blogjava.net/sbtvij/aggbug/339350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sbtvij/" target="_blank">神話</a> 2010-11-29 22:49 <a href="http://www.blogjava.net/sbtvij/articles/339350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE EBS常用表</title><link>http://www.blogjava.net/sbtvij/articles/339349.html</link><dc:creator>神話</dc:creator><author>神話</author><pubDate>Mon, 29 Nov 2010 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/sbtvij/articles/339349.html</guid><wfw:comment>http://www.blogjava.net/sbtvij/comments/339349.html</wfw:comment><comments>http://www.blogjava.net/sbtvij/articles/339349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sbtvij/comments/commentRss/339349.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sbtvij/services/trackbacks/339349.html</trackback:ping><description><![CDATA[<p>INV库存<br />
organization 两个含义:<br />
1. 经营单位，A/B/C分公司，A下面有A1，A2等工厂，主题目标是为了独立核算此组织<br />
ORG，ORG_ID;<br />
2. 库存组织，例如制造商的仓库，例如A1，A2等工厂<br />
Organization_id;<br />
HR_ORGANIZATION_UNITS －<br />
Org_organization_definitions<br />
Mtl_subinventory_ 库存组织单位<br />
MTL_PARAMETERS -库存组织参数（没有用ID，直接用name）<br />
MTL_SYSTEM_ITEMS_b -物料信息（同上，应用了库存组织name）<br />
MTL_SECONDARY_INVENTORIES -子库存组织 -<br />
MTL_ITEM_LOCATTIONS -货位 - SUBINVENTROY_CODE<br />
Mtl_Material_Transactions - (库存)物料事物表<br />
成本 mtl_transaction_accounts<br />
transaction_cost是事物成本；<br />
ACTUAL_COST是通过成本算法计算出来的实际成本，主计量单位<br />
现有量<br />
汇总历史记录（正负合计）<br />
Mtl_Material_Transactions<br />
MTL_ONHAND_QUANTITIES现有量表，组织/子库存/货位/物品 summary可能按照挑库先进先出统计，如果设置了"不允许负库存"，这样就不可能出现负数<br />
PO<br />
请购单头表<br />
Po_Requisition_Headers_all<br />
行表<br />
Po_Requisition_lines_all<br />
采购订单<br />
PO_HEADER_ALL<br />
PO_LINES_ALL<br />
采购接收－退货/组织间转移/正常状态 都需要使用这个模块<br />
RCV_TRANSACTIONS<br />
1. 接收100单位货物,放入&#8220;待质检&#8221;货位<br />
2. 接受/拒绝<br />
3. 库存/退回<br />
有三个不同的状态！例如：接收100个，80个接受入库，20个退回，那么有80个接受事务/20个退回事物<br />
select TRANSACTION_TYPE，DESTINATION_TYPE_CODE from RCV_TRANSACTIONS<br />
可以看出以下阶段：<br />
A1.RECEIVE &#8211; RECEIVING<br />
A2.ACCEPT &#8211; RECEIVING<br />
A3.DELIERY &#8211; INVETORY(影响库存现有量)<br />
如果按照正常模式，最后会触发产生MTL_MATERIAL_TRANSACTIONS<br />
销售订单<br />
OE_ORDER_headers_all<br />
SOLD_FROM_ORG_ID<br />
SOLD_TO_ORG_ID 就是客户层<br />
SHIP_FROM_ORG_ID<br />
SHIP_TO_ORG_ID 就是客户收货层<br />
INVOICE_TO_ORG_ID 就是客户收单层<br />
DELIVER_TO_ORG_ID<br />
和客户结构有关<br />
客户 RA_customers<br />
客户Address Ra_Addresses<br />
Address 货品抵达 site RA_SITE_USES_ALL<br />
Address 发票抵达 site<br />
OE_ORDER_LINEs_all<br />
GL凭证<br />
gl_je_batches<br />
凭证日期:                DEFAULT_EFFECTIVE_DATE<br />
会计期间:                DEFAULT_PERIOD_NAME<br />
原币种凭证批借贷方汇总: RUNNING_TOTAL_DR/CR 比如美元<br />
本位币凭证批借贷方汇总: RUNNING_TOTAL_ACCOUNTED_DR/CR</p>
<p>gl_je_headers日记账头信息<br />
批号:     JE_BATCH_ID<br />
会计期间: PERIOD_NAME<br />
币种:     CURRENCY_CODE<br />
汇率类型: CURRENCY_CONVERSION_TYPE<br />
汇率日期: CURRENCY_CONVERSION_DATE<br />
帐套:     SET_OF_BOOKS_ID 参考 GL_SETS_OF_BOOKS<br />
凭证类型: JE_CATEGORY 参考 GL_JE_SOURCES<br />
凭证来源: JE_SOURCE<br />
gl_je_lines日记账体信息<br />
CODE_COMBINATION_ID 科目组合编号<br />
GL_BALANCES 总帐余额<br />
PERIOD_NET_DR/CR 净值<br />
BEGIN_BALANCE_DR/CR 期初额</p>
<p>GL_JE_BATCHES 日记账批信息（当年）<br />
GL_ARCHIVE_BATCHES 日记账归档<br />
GL_JE_HEADERS 日记账头信息<br />
GL_JE_LINES 日记账明细信息<br />
其中GL_JE_BATCHES和GL_JE_HEADERS通过JE_BATCH_ID相关联，并且是一对多的关系<br />
其中GL_JE_HEADERS和GL_JE_LINES通过JE_HEADER_ID相关联，并且是一对多的关系<br />
GL_SETS_OF_BOOKS 账套信息，每套账有一行记录<br />
GL_PERIODS 会计期信息<br />
GL_CODE_COMBINATIONS 代码组合信息<br />
GL_BALANCE 总账余额表<br />
GL_DAILY_RATES 每天汇率<br />
GL_TRANSLATION_RATES_V 每月汇率——期间的平均汇率<br />
GL_BUDEGETS 总账预算信息<br />
GL_BUDGET_TYPES 预算类型表——仅支持一种预算类型，所以仅有一条记录<br />
GL_BUDGET_VERSIONS 预算版本信息，通过BUDGET_VERSION_ID与GL_BUDEGETS对应<br />
GL_INTERFACE 总账接口表<br />
GL_BUDGET_ASSIGNMENT_RANGES 预算分配范围<br />
GL_BUDGET_ASSIGNMENTS 预算帐户信息<br />
GL_BUDGET_PERIOD_RANGES 预算历期信息<br />
GL_BUDGET_INTERFACE 预算导入接口表<br />
GL_BUDGET_FROZEN_RANGES 预算冻结信息<br />
GL_BUDGET_ENTITIES 预算部门信息<br />
AR应收发票<br />
RA_CUSTOMER_TRX_ALL<br />
CUSTOMER_TRX_ID 发票编号<br />
BILL_TO_SITE_USE_ID 客户收单方编号<br />
PRIMARY_SALES_ID销售员<br />
REFERENCE是Oracle提供的外部编号输入框，但是由于版本问题和长度(&lt;=30)，不建议用户使用，如果要使用外部编号，请使用说明性弹性域<br />
RA_CUSTOMER_TRX_LINES_ALL<br />
LINE_ID            行号<br />
INVENTORY_ITEM_ID 可以为空，比如非物料的服务，只在DESCRIPTION中出现 /税行<br />
DESCRIPTION<br />
QUANTITY_INVOICE   开票数量<br />
LINE_TYPE          行类型 (一般/税)<br />
EXTEND_PRICE       本行金额<br />
注意：税行是隐藏行，所以至少会有两行<br />
收款情况<br />
AR_CASH_RECEIPTS_ALL（还包含了非收款信息）<br />
CASH_RECEIPT_ID 内部code<br />
RECEIPT_NUMBER   收款号<br />
RECEIPT_DATE     收款日期<br />
AMOUNT           总额<br />
RECEIPT_TYPE     现金/杂项 Cash/Misc<br />
FUNCTIONAL_AMOUNT 本位币计量金额<br />
UI上为RECEIPTS<br />
核销关系不是一一对应，也不是一次核销100%,UI上右下方的Application 按钮<br />
AR_RECEIVABLE_APPLICATIONS_ALL<br />
APPLIED_CUSTOMER_TRX_ID   发票编号<br />
APPLIED_CUSTOMER_TRX_LINE_ID   发票行编号</p>
<p>    STATUS APP表示核销 /UNAPP表示未核销<br />
AMOUNT_APPLIED                 匹配金额<br />
注意:红冲收款报表时间跨月的问题；必须联查 AR_CASH_RECEIPTS_ALL和   AR_CASH_RECEIPT_HISTORY_ALL<br />
AP<br />
应付帐款(是我方人员按照供应商提供的纸张发票信息录入)UI 上的invoice<br />
AP_INVOICES_ALL<br />
实际付款PAYMENT<br />
AP_CHECKS_ALL<br />
核销关系 同AR，右下方的Payment 按钮<br />
AP_INVOICE_PAYMENTS_ALL客户余额表，情况比较复杂:比如两个用户合并，应收应付差额，预付款<br />
资产信息FA_ADDITIONS<br />
名称<br />
编号<br />
分类<br />
数量<br />
资产类别<br />
FA_CATEGORIES<br />
资产帐簿<br />
FA_BOOK_CONTROLS 和会计帐簿有什么关系？<br />
FA_BOOKS<br />
UI中的Inquiry<br />
Mothed是折旧方法(直线法/产量法)<br />
FA_DISTRIBUTION_HISTORY分配assignment，给什么部门使用多少<br />
LOCATION_ID 部门 联查FA_LOCATIONS<br />
折旧信息(分摊方法)<br />
FA_DEPRN_DETAIL<br />
period_counter 折旧期间编号<br />
折旧事务(新增、重建、转移、报废)<br />
FA_TRANSACTION_HEADERS<br />
select fnd_profile.VALUE('ORG_ID') FROM DUAL<br />
select * from hr_operating_units hou where hou.organization_id=204<br />
--fnd<br />
select * from fnd_application<br />
select * from fnd_application_tl where application_id=101<br />
select * from fnd_application_vl where application_id = 101<br />
----值集<br />
select * from fnd_flex_value_sets<br />
select * from fnd_flex_values<br />
select * from fnd_flex_values_vl<br />
----弹性域<br />
select * from fnd_id_flexs<br />
select * from fnd_id_flex_structures where id_flex_code='GL#'<br />
select * from fnd_id_flex_segments where id_flex_code='GL#' and id_flex_num=50671<br />
select * from fnd_profile_options_vl<br />
select * from fnd_concurrent_programs    程序表<br />
select * from fnd_concurrent_requests    请求表<br />
select * from fnd_concurrent_processes   进程表<br />
--inv<br />
select * from org_organization_definitions   库存组织<br />
select * from mtl_parameters                 组织参数<br />
select * from mtl_system_items_b where inventory_item_id = 171 and organization_id=204 物料表<br />
select * from mtl_secondary_inventories    子库存<br />
select * from mtl_item_locations           货位<br />
select * from mtl_lot_numbers              批次<br />
select * from mtl_onhand_quantities        现有量表<br />
select * from mtl_serial_numbers           序列<br />
select * from mtl_material_transactions    物料事务记录<br />
select * from mtl_transaction_accounts     会计分录<br />
select * from mtl_transaction_types        事务类型<br />
select * from mtl_txn_source_types         事务来源类型<br />
select * from mfg_lookups ml where ml.LOOKUP_TYPE = 'MTL_TRANSACTION_ACTION'<br />
--po<br />
select * from po_requisition_headers_all   请求头<br />
select * from po_requisition_lines_all     请求行<br />
select * from po_headers_all               订单头<br />
select * from po_lines_all                 订单行<br />
select * from po_line_locations_all<br />
select * from po_distributions_all          分配<br />
select * from po_releases_all               发送<br />
select * from rcv_shipment_headers          采购接收头<br />
select * from rcv_shipment_lines            采购接收行<br />
select * from rcv_transactions              接收事务处理<br />
select * from po_agents<br />
select * from po_vendors                    订单<br />
select * from po_vendor_sites_all<br />
--oe<br />
select * from ra_customers                  客户<br />
select * from ra_addresses_all              地址<br />
select * from ra_site_uses_all              用户<br />
select * from oe_order_headers_all          销售头<br />
select * from oe_order_lines_all            销售行<br />
select * from wsh_new_deliveries            发送<br />
select * from wsh_delivery_details<br />
select * from wsh_delivery_assignments<br />
--gl<br />
select * from gl_sets_of_books     总帐<br />
select * from gl_code_combinations gcc where gcc.summary_flag='Y'   科目组合<br />
select * from gl_balances          科目余额<br />
select * from gl_je_batches        凭证批<br />
select * from gl_je_headers        凭证头<br />
select * from gl_je_lines          凭证行<br />
select * from gl_je_categories     凭证分类<br />
select * from gl_je_sources        凭证来源<br />
select * from gl_summary_templates 科目汇总模板<br />
select * from gl_account_hierarchies 科目汇总模板层次<br />
--ar<br />
select * from ar_batches_all                 事务处理批<br />
select * from ra_customer_trx_all            发票头<br />
select * from ra_customer_trx_lines_all      发票行<br />
select * from ra_cust_trx_line_gl_dist_all   发票分配<br />
select * from ar_cash_receipts_all           收款<br />
select * from ar_receivable_applications_all 核销<br />
select * from ar_payment_schedules_all       发票调整<br />
select * from ar_adjustments_all             会计分录<br />
select * from ar_distributions_all           付款计划<br />
--ap<br />
select * from ap_invoices_all               发票头<br />
select * from ap_invoice_distributions_all 发票行<br />
select * from ap_payment_schedules_all      付款计划<br />
select * from ap_check_stocks_all           单据<br />
select * from ap_checks_all                 付款<br />
select * from ap_bank_branches              银行<br />
select * from ap_bank_accounts_all          银行帐号<br />
select * from ap_invoice_payments_all       核销</p><img src ="http://www.blogjava.net/sbtvij/aggbug/339349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sbtvij/" target="_blank">神話</a> 2010-11-29 22:39 <a href="http://www.blogjava.net/sbtvij/articles/339349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle EBS:SQL 失效一揽子PO协议</title><link>http://www.blogjava.net/sbtvij/articles/338739.html</link><dc:creator>神話</dc:creator><author>神話</author><pubDate>Mon, 22 Nov 2010 15:23:00 GMT</pubDate><guid>http://www.blogjava.net/sbtvij/articles/338739.html</guid><wfw:comment>http://www.blogjava.net/sbtvij/comments/338739.html</wfw:comment><comments>http://www.blogjava.net/sbtvij/articles/338739.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sbtvij/comments/commentRss/338739.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sbtvij/services/trackbacks/338739.html</trackback:ping><description><![CDATA[<p>1.查询一揽子PO：<br />
<br />
这里要注意的是：不同的付款条件,币种，税率，都会可能产生一张新的一揽子PO协议<br />
<br />
</p>
<div class="UBBPanel codePanel">
<div class="UBBTitle"><a style="font-style: normal; float: right; cursor: pointer; font-weight: normal;">复制内容到剪贴板</a><img src="http://www.dezai.cn/Blog/images/code.gif" alt="程序代码" style="margin: 0px 2px -3px 0px;" /> 程序代码</div>
<div class="UBBContent" id="code5991"><br />
select pla.PO_LINE_ID,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pla.PO_HEADER_ID,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pla.ITEM_ID,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msib.SEGMENT1 ITEM_CODE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pla.UNIT_PRICE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pla.ITEM_DESCRIPTION,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pla.START_DATE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pla.EXPIRATION_DATE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pla.CANCEL_FLAG,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pla.CLOSED_CODE,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pha.PO_HEADER_ID,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pha.VENDOR_ID,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pha.VENDOR_SITE_ID,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pha.TERMS_ID,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pla.TAX_CODE_ID<br />
&nbsp;&nbsp;from PO_LINES_ALL pla, PO_HEADERS_ALL pha,MTL_SYSTEM_ITEMS_B msib<br />
where nvl(pla.closed_code, 'OPEN') != 'FINALLY CLOSED'<br />
&nbsp;&nbsp; and nvl(pla.CANCEL_FLAG, 'N') = 'N'<br />
&nbsp;&nbsp; and pla.PO_HEADER_ID=pha.PO_HEADER_ID<br />
&nbsp;&nbsp; and nvl(pha.closed_code, 'OPEN') != 'FINALLY CLOSED'<br />
&nbsp;&nbsp; and nvl(pha.CANCEL_FLAG,'N')='N'<br />
&nbsp;&nbsp; and pha.ENABLED_FLAG='Y'<br />
&nbsp;&nbsp; and pha.TYPE_LOOKUP_CODE = 'BLANKET'<br />
&nbsp;&nbsp; and msib.INVENTORY_ITEM_ID=pla.ITEM_ID</div>
</div>
<p><br />
<br />
2.通过查找对应的ID，失效对应的价格，我这里好像少了付款条件跟币种，税率这几个条件，<br />
<br />
</p>
<div class="UBBPanel codePanel">
<div class="UBBTitle"><a style="font-style: normal; float: right; cursor: pointer; font-weight: normal;">复制内容到剪贴板</a><img src="http://www.dezai.cn/Blog/images/code.gif" alt="程序代码" style="margin: 0px 2px -3px 0px;" /> 程序代码</div>
<div class="UBBContent" id="code83156"><br />
procedure SetPriceExpireDate(P_ITEM_CODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IN VARCHAR2,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P_VENDOR_CODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IN VARCHAR2,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P_VENDOR_SITE_CODE IN VARCHAR2,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P_ORG_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN VARCHAR2,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_retval&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out number) is<br />
&nbsp;&nbsp;begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;Update PO_LINES_ALL pla<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set pla.EXPIRATION_DATE = sysdate<br />
&nbsp;&nbsp;&nbsp;&nbsp; where pla.ITEM_ID = GetItemID(P_ITEM_CODE, P_ORG_ID)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and pla.ORG_ID = P_ORG_ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and nvl(pla.cancel_flag, 'N') = 'N'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and nvl(closed_code, 'OPEN') != 'FINALLY CLOSED'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and exists<br />
&nbsp;&nbsp;&nbsp;&nbsp; (select *<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from PO_HEADERS_ALL pha<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where pha.PO_HEADER_ID = pla.PO_HEADER_ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and pha.TYPE_LOOKUP_CODE = 'BLANKET'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and pha.VENDOR_ID = GetVendorID(P_VENDOR_CODE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and pha.VENDOR_SITE_ID =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetVendorSiteID(P_VENDOR_SITE_CODE, P_ORG_ID));<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;v_retval := 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;COMMIT;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;EXCEPTION<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHEN OTHERS THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_retval := 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;end SetPriceExpireDate;</div>
</div>
<p><br />
<br />
3.辅助的几个函数</p>
<div class="UBBPanel codePanel">
<div class="UBBTitle"><a style="font-style: normal; float: right; cursor: pointer; font-weight: normal;">复制内容到剪贴板</a><img src="http://www.dezai.cn/Blog/images/code.gif" alt="程序代码" style="margin: 0px 2px -3px 0px;" /> 程序代码</div>
<div class="UBBContent" id="code78220"><br />
Function GetVendorID(P_Vendor_Code IN VARCHAR2) RETURN NUMBER as<br />
&nbsp;&nbsp;&nbsp;&nbsp;v_vendor_id number;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;begin<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;select pv.VENDOR_ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;into v_vendor_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from po_vendors pv<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; where pv.SEGMENT1 = P_Vendor_Code;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return v_vendor_id;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;end;<br />
<br />
&nbsp;&nbsp;Function GetVendorSiteID(P_Vendor_SITE_CODE IN VARCHAR2,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P_ORG_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN NUMBER) RETURN NUMBER as<br />
&nbsp;&nbsp;&nbsp;&nbsp;v_vendor_site_id number;<br />
&nbsp;&nbsp;begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;select pvsa.VENDOR_SITE_ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;into v_vendor_site_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from PO_VENDOR_SITES_ALL pvsa<br />
&nbsp;&nbsp;&nbsp;&nbsp; where pvsa.VENDOR_SITE_CODE = P_Vendor_SITE_CODE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and pvsa.ORG_ID = P_ORG_ID;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return v_vendor_site_id;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;end;<br />
<br />
&nbsp;&nbsp;FUNCTION GetItemID(P_ITEM_CODE IN VARCHAR2, P_ORG_ID IN NUMBER)<br />
&nbsp;&nbsp;&nbsp;&nbsp;RETURN NUMBER as<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;v_item_id number;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;select msib.INVENTORY_ITEM_ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;into v_item_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from MTL_SYSTEM_ITEMS_B msib<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; where msib.SEGMENT1 = P_ITEM_CODE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AND msib.ORGANIZATION_ID = P_ORG_ID;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return v_item_id;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;end;</div>
</div><img src ="http://www.blogjava.net/sbtvij/aggbug/338739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sbtvij/" target="_blank">神話</a> 2010-11-22 23:23 <a href="http://www.blogjava.net/sbtvij/articles/338739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关联po主打表和pr表信息：</title><link>http://www.blogjava.net/sbtvij/articles/338738.html</link><dc:creator>神話</dc:creator><author>神話</author><pubDate>Mon, 22 Nov 2010 15:16:00 GMT</pubDate><guid>http://www.blogjava.net/sbtvij/articles/338738.html</guid><wfw:comment>http://www.blogjava.net/sbtvij/comments/338738.html</wfw:comment><comments>http://www.blogjava.net/sbtvij/articles/338738.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sbtvij/comments/commentRss/338738.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sbtvij/services/trackbacks/338738.html</trackback:ping><description><![CDATA[<br />
<br />
select poh.segment1 po_number,<br />
pol.line_num,<br />
pol.item_description,<br />
ploc.quantity,<br />
mtl.segment1||','||mtl.segment2 po_item, prh.segment1 req_num,<br />
fnd.user_name requestor, prl.need_by_date<br />
<br />
from po_line_locations_all ploc,<br />
po_lines_all pol,<br />
po_headers_all poh,<br />
mtl_system_items_b mtl,<br />
po_requisition_lines_all prl,<br />
po_requisition_headers_all prh,<br />
fnd_user fnd<br />
where poh.po_header_id = pol.po_header_id<br />
and pol.po_line_id = ploc.po_line_id<br />
and pol.item_id = mtl.inventory_item_id(+)<br />
and ploc.line_location_id = prl.line_location_id<br />
and prl.requisition_header_id = prh.requisition_header_id<br />
and prh.preparer_id = fnd.employee_id<br />
and mtl.organization_id(+) = &lt;your_org&gt;<br />
<br />
1)PO_DISTRIBUTIONS_ALL (PO_HEADER_ID, REQ_DISTRIBUTION_ID)<br />
2)PO_HEADERS_ALL (PO_HEADER_ID, SEGMENT1)<br />
3)PO_REQ_DISTRIBUTIONS_ALL (DISTRIBUTION_ID, REQUISITION_LINE_ID)<br />
4)PO_REQUISITION_LINES_ALL (REQUISITION_LINE_ID)<br />
5)PO_REQQUISITION_HEADERS_ALL (REQUISITION_HEADER_ID, REQUISITION_LINE_ID, SEGMENT1)<br />
<br />
Make a join on PO_DISTRIBUTIONS_ALL (REQ_DISTRIBUTION_ID) and<br />
PO_REQ_DISTRIBUTIONS_ALL (DISTRIBUTION_ID) to see if there is a PO for the req.<br />
<br />
Join with<br />
<br />
po_distributions.req_distribution_id = po_req_distributions.distribution_id (+)<br />
<br /><img src ="http://www.blogjava.net/sbtvij/aggbug/338738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sbtvij/" target="_blank">神話</a> 2010-11-22 23:16 <a href="http://www.blogjava.net/sbtvij/articles/338738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle_PO_ER图/Oralce_PR_ER_Model/Standard_PO_Flow</title><link>http://www.blogjava.net/sbtvij/articles/338736.html</link><dc:creator>神話</dc:creator><author>神話</author><pubDate>Mon, 22 Nov 2010 14:54:00 GMT</pubDate><guid>http://www.blogjava.net/sbtvij/articles/338736.html</guid><wfw:comment>http://www.blogjava.net/sbtvij/comments/338736.html</wfw:comment><comments>http://www.blogjava.net/sbtvij/articles/338736.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sbtvij/comments/commentRss/338736.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sbtvij/services/trackbacks/338736.html</trackback:ping><description><![CDATA[<h1 class="title_txt">
<img src="http://blog.csdn.net/images/turnship.gif" alt="转载" height="15" border="0" width="15" />&nbsp;
Oracle_PO_ER图/Oralce_PR_ER_Model/Standard_PO_Flow
<cite class="fav_csdnstylebykimi"><a class="fav_csdnstylebykimi" title="收藏到我的网摘中，并分享给我的朋友">收藏</a> </cite>
</h1>
<p>reference: <a href="http://blog.csdn.net/SUNTYQ/archive/2009/09/24/4592152.aspx">http://blog.csdn.net/SUNTYQ/archive/2009/09/24/4592152.aspx</a></p>
<p><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/suntyq/EntryImages/20090924/Standard_PO_Flow.jpg" alt="Standard_PO_Flow" height="543" width="795" /><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/suntyq/EntryImages/20090924/Oralce_PR_ER_Model.jpg" alt="Oralce_PR_ER_Model." height="453" width="691" /><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/suntyq/EntryImages/20090924/Oracle_PO_ER%E5%9B%BE633894333296875000.jpg" alt="Oracle_PO_ER图" height="545" width="786" /></p><img src ="http://www.blogjava.net/sbtvij/aggbug/338736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sbtvij/" target="_blank">神話</a> 2010-11-22 22:54 <a href="http://www.blogjava.net/sbtvij/articles/338736.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>精妙SQL语句收集</title><link>http://www.blogjava.net/sbtvij/articles/338645.html</link><dc:creator>神話</dc:creator><author>神話</author><pubDate>Sun, 21 Nov 2010 15:43:00 GMT</pubDate><guid>http://www.blogjava.net/sbtvij/articles/338645.html</guid><wfw:comment>http://www.blogjava.net/sbtvij/comments/338645.html</wfw:comment><comments>http://www.blogjava.net/sbtvij/articles/338645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sbtvij/comments/commentRss/338645.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sbtvij/services/trackbacks/338645.html</trackback:ping><description><![CDATA[或许大家对注入有一定的了解，那么你是不是知道一些些SQL语言的知识吗？至少也要会一点吧，手动查找漏洞的朋友或许有此经验，想学好一技术，得从基础学起！<span style="display: none;"><font face="Tahoma"> L`/^b}R[|~
</font></span><br />
这篇文章黑基曾经发贴过这样的贴，不过看过的人又有多少呢？汗！<span style="display: none;"><font face="Tahoma"> :5 P{]@/ </font></span><br />
<span style="display: none;"><font face="Tahoma">s@t` a] </font></span><br />
<span style="display: none;"><font face="Tahoma">(RcWg+zvap
</font></span><br />
SQL语句先前写的时候，很容易把一些特殊的用法忘记，我特此整理了一下SQL语句操作。<span style="display: none;"><font face="Tahoma"> "{&amp;KQb*:&amp;
</font></span><br />
一、基础<span style="display: none;"><font face="Tahoma">
[ku&gt;e9pjBo </font></span><br />
<span style="display: none;"><font face="Tahoma">91
4-Hu9$Y </font></span><br />
1、说明：创建数据库<span style="display: none;"><font face="Tahoma"> 14 m~ #\D. </font></span><br />
CREATE DATABASE database-name <span style="display: none;"><font face="Tahoma">j@' oS 6S
</font></span><br />
2、说明：删除数据库<span style="display: none;"><font face="Tahoma"> 9dB
&amp;!r 9H </font></span><br />
drop database dbname<span style="display: none;"><font face="Tahoma"> 8x|RXqJuUf </font></span><br />
3、说明：备份sql
server<span style="display: none;"><font face="Tahoma"> Yg0g2 mX=
</font></span><br />
--- 创建 备份数据的 device<span style="display: none;"><font face="Tahoma"> 0.i, NNs6 </font></span><br />
USE master<span style="display: none;"><font face="Tahoma"> XBH+]d\&gt;* </font></span><br />
EXEC
sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'<span style="display: none;"><font face="Tahoma"> "` E,tq </font></span><br />
--- 开始
备份<span style="display: none;"><font face="Tahoma"> 5 &gt;} Bw, X
</font></span><br />
BACKUP DATABASE pubs TO testBack <span style="display: none;"><font face="Tahoma">s{c! =, "
</font></span><br />
4、说明：创建新表<span style="display: none;"><font face="Tahoma"> ^
qYp+"ww </font></span><br />
create table tabname(col1 type1 [not null] [primary
key],col2 type2 [not null],..)<span style="display: none;"><font face="Tahoma"> Lo
KQ/%7 e </font></span><br />
根据已有的表创建新表： <span style="display: none;"><font face="Tahoma">(6`NJ}|/IG </font></span><br />
A：create table tab_new like tab_old
(使用旧表创建新表)<span style="display: none;"><font face="Tahoma"> se/F ?tOb
</font></span><br />
B：create table tab_new as select col1,col2&#8230; from tab_old
definition only<span style="display: none;"><font face="Tahoma"> sdHx7g [8X
</font></span><br />
5、说明：删除新表<span style="display: none;"><font face="Tahoma"> l(q :X
skg </font></span><br />
drop table tabname <span style="display: none;"><font face="Tahoma">n[J( ep|X </font></span><br />
6、说明：增加一个列<span style="display: none;"><font face="Tahoma"> W{l3&amp;=nvjC </font></span><br />
Alter
table tabname add column col type<span style="display: none;"><font face="Tahoma">
: Dfw\4
</font></span><br />
注：列增加后将不能删除。DB2中列加上后数据类型也不能改变，唯一能改变的是增加varchar类型的长度。<span style="display: none;"><font face="Tahoma"> m S 0kP\&gt;
</font></span><br />
7、说明：添加主键： Alter table tabname add primary key(col) <span style="display: none;"><font face="Tahoma">FX2rF 4 T </font></span><br />
说明：删除主键：
Alter table tabname drop primary key(col) <span style="display: none;"><font face="Tahoma">r &lt;,Lai.]m </font></span><br />
8、说明：创建索引：create [unique] index
idxname on tabname(col&#8230;.) <span style="display: none;"><font face="Tahoma">bnqs&gt;UN$ </font></span><br />
删除索引：drop index idxname<span style="display: none;"><font face="Tahoma"> ol2GT{7j L
</font></span><br />
注：索引是不可更改的，想更改必须删除重新建。<span style="display: none;"><font face="Tahoma"> A:Mvip </font></span><br />
9、说明：创建视图：create view viewname as select
statement <span style="display: none;"><font face="Tahoma">\ :Z ~vTTR
</font></span><br />
删除视图：drop view viewname<span style="display: none;"><font face="Tahoma"> jM&amp;/2]`bP </font></span><br />
10、说明：几个简单的基本的sql语句<span style="display: none;"><font face="Tahoma"> 5 P4&amp; ~ 8
</font></span><br />
选择：select * from table1 where 范围<span style="display: none;"><font face="Tahoma"> vd$H 2%^b </font></span><br />
插入：insert
into table1(field1,field2) values(value1,value2)<span style="display: none;"><font face="Tahoma"> Ts (8$DhSe </font></span><br />
删除：delete
from table1 where 范围<span style="display: none;"><font face="Tahoma"> Nxp=tZA R
</font></span><br />
更新：update table1 set field1=value1 where 范围<span style="display: none;"><font face="Tahoma"> hNg5u)Od L </font></span><br />
查找：select
* from table1 where field1 like &#8217;%value1%&#8217; ---like的语法很精妙，查资料!<span style="display: none;"><font face="Tahoma"> F6 qxMAH* </font></span><br />
排序：select *
from table1 order by field1,field2 [desc]<span style="display: none;"><font face="Tahoma"> Xho/`I[;A </font></span><br />
总数：select count as totalcount from
table1<span style="display: none;"><font face="Tahoma"> x /ZUcA2
</font></span><br />
求和：select sum(field1) as sumvalue from table1<span style="display: none;"><font face="Tahoma"> #G\*0 )X </font></span><br />
平均：select
avg(field1) as avgvalue from table1<span style="display: none;"><font face="Tahoma"> V r O:FfO </font></span><br />
最大：select max(field1) as maxvalue from
table1<span style="display: none;"><font face="Tahoma"> =fi8 GeH1
</font></span><br />
最小：select min(field1) as minvalue from table1<span style="display: none;"><font face="Tahoma"> p g. 4
</font></span><br />
11、说明：几个高级查询运算词<span style="display: none;"><font face="Tahoma">
BR;M5COj M </font></span><br />
A： UNION 运算符 <span style="display: none;"><font face="Tahoma">}{Id|b #LC </font></span><br />
UNION 运算符通过组合其他两个结果表（例如 TABLE1 和
TABLE2）并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时（即 UNION
ALL），不消除重复行。两种情况下，派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 <span style="display: none;"><font face="Tahoma">X9Of |LE0 </font></span><br />
B： EXCEPT
运算符 <span style="display: none;"><font face="Tahoma">l8a &amp;?5TVM
</font></span><br />
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当
ALL 随 EXCEPT 一起使用时 (EXCEPT ALL)，不消除重复行。 <span style="display: none;"><font face="Tahoma">? l[M 5` </font></span><br />
C： INTERSECT 运算符<span style="display: none;"><font face="Tahoma"> "6YPW|"MK </font></span><br />
INTERSECT
运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时
(INTERSECT ALL)，不消除重复行。 <span style="display: none;"><font face="Tahoma">NNH
&lt;*PmDA </font></span><br />
注：使用运算词的几个查询结果行必须是一致的。 <span style="display: none;"><font face="Tahoma">}s(9 2b </font></span><br />
12、说明：使用外连接
<span style="display: none;"><font face="Tahoma">}ie-b 1 d </font></span><br />
A、left
outer join： <span style="display: none;"><font face="Tahoma">E{ h`mY5:n
</font></span><br />
左外连接（左连接）：结果集几包括连接表的匹配行，也包括左连接表的所有行。 <span style="display: none;"><font face="Tahoma">cJ%T P'm@H </font></span><br />
SQL: select
a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c<span style="display: none;"><font face="Tahoma"> ,LE7 oY </font></span><br />
B：right outer
join: <span style="display: none;"><font face="Tahoma">V0 bvy D
</font></span><br />
右外连接(右连接)：结果集既包括连接表的匹配连接行，也包括右连接表的所有行。 <span style="display: none;"><font face="Tahoma">b4C gG ]}v </font></span><br />
C：full
outer join： <span style="display: none;"><font face="Tahoma">+Ol :9@oU5
</font></span><br />
全外连接：不仅包括符号连接表的匹配行，还包括两个连接表中的所有记录。<span style="display: none;"><font face="Tahoma"> yR D1U ` </font></span><br />
<span style="display: none;"><font face="Tahoma">P+t/Ax )4J </font></span><br />
二、提升<span style="display: none;"><font face="Tahoma"> ^b0S)# O^ </font></span><br />
<span style="display: none;"><font face="Tahoma">fL TG+HHW
</font></span><br />
1、说明：复制表(只复制结构,源表名：a 新表名：b) (Access可用)<span style="display: none;"><font face="Tahoma"> &gt;~ j" i </font></span><br />
法一：select
* into b from a where 1&lt;&gt;1<span style="display: none;"><font face="Tahoma">
p? g{r FX </font></span><br />
法二：select top 0 * into b from a<span style="display: none;"><font face="Tahoma"> ID`iD* </font></span><br />
<span style="display: none;"><font face="Tahoma">QgJE ,B ~o
</font></span><br />
2、说明：拷贝表(拷贝数据,源表名：a 目标表名：b) (Access可用)<span style="display: none;"><font face="Tahoma"> R6 }g=+ A </font></span><br />
insert into
b(a, b, c) select d,e,f from b;<span style="display: none;"><font face="Tahoma">
5LFfr?qM; </font></span><br />
<span style="display: none;"><font face="Tahoma">&amp;w` kDAPV: </font></span><br />
3、说明：跨数据库之间表的拷贝(具体数据使用绝对路径)
(Access可用)<span style="display: none;"><font face="Tahoma"> o?W" ,a
</font></span><br />
insert into b(a, b, c) select d,e,f from b in &#8216;具体数据库&#8217; where
条件<span style="display: none;"><font face="Tahoma"> {S o - Q&lt;
</font></span><br />
例子：..from b in '"&amp;Server.MapPath(".")&amp;"\data.mdb"
&amp;"' where..<span style="display: none;"><font face="Tahoma"> :/kQ5KF
</font></span><br />
<span style="display: none;"><font face="Tahoma">DAa1 2"'
</font></span><br />
4、说明：子查询(表名1：a 表名2：b)<span style="display: none;"><font face="Tahoma"> R@1h^ {6A </font></span><br />
select a,b,c from a where a IN (select
d from b ) 或者: select a,b,c from a where a IN (1,2,3)<span style="display: none;"><font face="Tahoma"> 2d* =?T:rR </font></span><br />
<span style="display: none;"><font face="Tahoma">wh'K $Y,E
</font></span><br />
5、说明：显示文章、提交人和最后回复时间<span style="display: none;"><font face="Tahoma"> \re:GsZp B </font></span><br />
select a.title,a.username,b.adddate
from table a,(select max(adddate) adddate from table where table.title=a.title)
b<span style="display: none;"><font face="Tahoma"> &gt;_'Ai5k q
</font></span><br />
<span style="display: none;"><font face="Tahoma">&gt; Qo=z X k
</font></span><br />
6、说明：外连接查询(表名1：a 表名2：b)<span style="display: none;"><font face="Tahoma"> ieu"&lt;Wc </font></span><br />
select a.a, a.b, a.c, b.c, b.d, b.f
from a LEFT OUT JOIN b ON a.a = b.c<span style="display: none;"><font face="Tahoma"> sE ?.W WU] </font></span><br />
<span style="display: none;"><font face="Tahoma">G a= 2 8&lt;H </font></span><br />
7、说明：在线视图查询(表名1：a )<span style="display: none;"><font face="Tahoma"> n8*V ( q </font></span><br />
select *
from (SELECT a,b,c FROM a) T where t.a &gt; 1;<span style="display: none;"><font face="Tahoma"> t- JauC K </font></span><br />
<span style="display: none;"><font face="Tahoma">&lt;*H d&gt;
</font></span><br />
8、说明：between的用法,between限制查询数据范围时包括了边界值,not between不包括<span style="display: none;"><font face="Tahoma"> R 3`DXg </font></span><br />
select * from
table1 where time between time1 and time2<span style="display: none;"><font face="Tahoma"> 7nczA Yh u </font></span><br />
select a,b,c, from table1 where a not
between 数值1 and 数值2<span style="display: none;"><font face="Tahoma"> d(xYGu 2U
</font></span><br />
<span style="display: none;"><font face="Tahoma">Ik -q7-M
</font></span><br />
9、说明：in 的使用方法<span style="display: none;"><font face="Tahoma"> J
%e# m </font></span><br />
select * from table1 where a [not] in
(&#8216;值1&#8217;,&#8217;值2&#8217;,&#8217;值4&#8217;,&#8217;值6&#8217;)<span style="display: none;"><font face="Tahoma"> IV t mD{z
</font></span><br />
<span style="display: none;"><font face="Tahoma">y UR^ (
</font></span><br />
10、说明：两张关联表，删除主表中已经在副表中没有的信息 <span style="display: none;"><font face="Tahoma">m U A;zNbO </font></span><br />
delete from table1 where not exists (
select * from table2 where table1.field1=table2.field1 )<span style="display: none;"><font face="Tahoma"> zGH -`&lt;S: </font></span><br />
<span style="display: none;"><font face="Tahoma">_&gt;v; jne L
</font></span><br />
11、说明：四表联查问题：<span style="display: none;"><font face="Tahoma">
}=x |!4.`d </font></span><br />
select * from a left inner join b on a.a=b.b right
inner join c on a.a=c.c inner join d on a.a=d.d where .....<span style="display: none;"><font face="Tahoma"> k_W#{ e9O </font></span><br />
<span style="display: none;"><font face="Tahoma">* U8&lt;[ {
</font></span><br />
12、说明：日程安排提前五分钟提醒 <span style="display: none;"><font face="Tahoma">^c[@"Gq </font></span><br />
SQL: select * from 日程安排 where
datediff('minute',f开始时间,getdate())&gt;5<span style="display: none;"><font face="Tahoma"> 1 R A\ ^| </font></span><br />
<span style="display: none;"><font face="Tahoma">c &lt;S . *&amp; </font></span><br />
13、说明：一条sql 语句搞定数据库分页<span style="display: none;"><font face="Tahoma"> Kdm#o=}Mec </font></span><br />
select top
10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where
b.主键字段 = a.主键字段 order by a.排序字段<span style="display: none;"><font face="Tahoma">
&gt;PqTYyvH&lt; </font></span><br />
<span style="display: none;"><font face="Tahoma">kl' ; %mv&gt; </font></span><br />
14、说明：前10条记录<span style="display: none;"><font face="Tahoma"> jE 9 K 0C </font></span><br />
select top
10 * form table1 where 范围<span style="display: none;"><font face="Tahoma">
mw47"&amp;9~h </font></span><br />
<span style="display: none;"><font face="Tahoma">OE- " tt
</font></span><br />
15、说明：选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)<span style="display: none;"><font face="Tahoma"> OGf+S w z6 </font></span><br />
select
a,b,c from tablename ta where a=(select max(a) from tablename tb where
tb.b=ta.b)<span style="display: none;"><font face="Tahoma"> J ,]fg|sB4
</font></span><br />
<span style="display: none;"><font face="Tahoma">\6 : Zi M{
</font></span><br />
16、说明：包括所有在 TableA 中但不在 TableB和TableC
中的行并消除所有重复行而派生出一个结果表<span style="display: none;"><font face="Tahoma"> c }j/qiR
</font></span><br />
(select a from tableA ) except (select a from tableB) except
(select a from tableC)<span style="display: none;"><font face="Tahoma"> )\j4 ({n j
</font></span><br />
<span style="display: none;"><font face="Tahoma">ZZ{De=f
</font></span><br />
17、说明：随机取出10条数据<span style="display: none;"><font face="Tahoma">
z]]` ~ |;, </font></span><br />
select top 10 * from tablename order by
newid()<span style="display: none;"><font face="Tahoma"> 8!6:&gt; #z
</font></span><br />
<span style="display: none;"><font face="Tahoma">-f'm&lt;cKjc
</font></span><br />
18、说明：随机选择记录<span style="display: none;"><font face="Tahoma">
/=$Sa.L OD </font></span><br />
select newid()<span style="display: none;"><font face="Tahoma"> B, p+'+] </font></span><br />
<span style="display: none;"><font face="Tahoma">.NG C{2fe </font></span><br />
19、说明：删除重复记录<span style="display: none;"><font face="Tahoma"> '0? zq7y! </font></span><br />
Delete from
tablename where id not in (select max(id) from tablename group by
col1,col2,...)<span style="display: none;"><font face="Tahoma"> ^M7 X8 3 _
</font></span><br />
<span style="display: none;"><font face="Tahoma">ee`= &lt;&lt;x
</font></span><br />
20、说明：列出数据库里所有的表名<span style="display: none;"><font face="Tahoma"> l\H:$:1}- </font></span><br />
select name from sysobjects where
type='U' <span style="display: none;"><font face="Tahoma">// 'k"_ =I
</font></span><br />
<span style="display: none;"><font face="Tahoma">oxLxf ; V$
</font></span><br />
21、说明：列出表里的所有的<span style="display: none;"><font face="Tahoma"> m
&amp;c-\ J&gt;) </font></span><br />
select name from syscolumns where
id=object_id('TableName')<span style="display: none;"><font face="Tahoma"> Zvy-x
9!&amp;t </font></span><br />
<span style="display: none;"><font face="Tahoma">E =0w,
HMB
</font></span><br />
22、说明：列示type、vender、pcs字段，以type字段排列，case可以方便地实现多重选择，类似select
中的case。<span style="display: none;"><font face="Tahoma"> # hQI 91 c
</font></span><br />
select type,sum(case vender when 'A' then pcs else 0
end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then
pcs else 0 end) FROM tablename group by type<span style="display: none;"><font face="Tahoma"> zjY+I9c# </font></span><br />
显示结果：<span style="display: none;"><font face="Tahoma"> n6c] m aX] </font></span><br />
type vender pcs<span style="display: none;"><font face="Tahoma"> S I a] H </font></span><br />
电脑 A 1<span style="display: none;"><font face="Tahoma"> O * ^ a m </font></span><br />
电脑 A 1<span style="display: none;"><font face="Tahoma"> b8X ?PH iA </font></span><br />
光盘 B
2<span style="display: none;"><font face="Tahoma"> #) e ^K el </font></span><br />
光盘
A 2<span style="display: none;"><font face="Tahoma"> Ph 9+F^&gt;u
</font></span><br />
手机 B 3<span style="display: none;"><font face="Tahoma"> :B \yT2,
</font></span><br />
手机 C 3<span style="display: none;"><font face="Tahoma"> EM zW1y\X
</font></span><br />
<span style="display: none;"><font face="Tahoma">kvLR z E
</font></span><br />
23、说明：初始化表table1<span style="display: none;"><font face="Tahoma">
9.I)^v#H# </font></span><br />
<span style="display: none;"><font face="Tahoma">3{ Tt0
8T; </font></span><br />
TRUNCATE TABLE table1<span style="display: none;"><font face="Tahoma"> |:) he 8~ </font></span><br />
<span style="display: none;"><font face="Tahoma">[ *rg;zxSc </font></span><br />
24、说明：选择从10到15的记录<span style="display: none;"><font face="Tahoma"> le"* p: </font></span><br />
select top 5
* from (select top 15 * from table order by id asc) table_别名 order by id
desc<span style="display: none;"><font face="Tahoma"> Re)VG]= &amp;y
</font></span><br />
<span style="display: none;"><font face="Tahoma">"1c}'/p,n
</font></span><br />
三、技巧<span style="display: none;"><font face="Tahoma"> + K"sHcM,M
</font></span><br />
<span style="display: none;"><font face="Tahoma">$L +:8n&gt;
</font></span><br />
1、1=1，1=2的使用，在SQL语句组合时用的较多<span style="display: none;"><font face="Tahoma"> Q K`F^)j( </font></span><br />
<span style="display: none;"><font face="Tahoma">A_l / m 4 </font></span><br />
&#8220;where 1=1&#8221; 是表示选择全部 &#8220;where
1=2&#8221;全部不选，<span style="display: none;"><font face="Tahoma"> Q =C/ .\6{
</font></span><br />
如：<span style="display: none;"><font face="Tahoma"> ],\+ X# q
</font></span><br />
if @strWhere !='' <span style="display: none;"><font face="Tahoma">KYJ\\F- </font></span><br />
begin<span style="display: none;"><font face="Tahoma"> N(W &amp; {B&amp; </font></span><br />
set @strSQL = 'select count(*)
as Total from [' + @tblName + '] where ' + @strWhere <span style="display: none;"><font face="Tahoma">oNdjw # +I </font></span><br />
end<span style="display: none;"><font face="Tahoma"> FMa Utg% </font></span><br />
else <span style="display: none;"><font face="Tahoma">5! C+ELhf </font></span><br />
begin<span style="display: none;"><font face="Tahoma"> Hc-IEPq&gt; </font></span><br />
set
@strSQL = 'select count(*) as Total from [' + @tblName + ']' <span style="display: none;"><font face="Tahoma">Z) O P4Hj </font></span><br />
end <span style="display: none;"><font face="Tahoma">?t]} a ' </font></span><br />
<span style="display: none;"><font face="Tahoma">:lJv%HI+ </font></span><br />
我们可以直接写成<span style="display: none;"><font face="Tahoma"> ~Erj\ pV </font></span><br />
set @strSQL
= 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere
<span style="display: none;"><font face="Tahoma">K^ } , : </font></span><br />
<span style="display: none;"><font face="Tahoma">B . 0 &amp;{s*
</font></span><br />
2、收缩数据库<span style="display: none;"><font face="Tahoma">
EOjZ2iT&amp;x, </font></span><br />
--重建索引<span style="display: none;"><font face="Tahoma"> us i\ ] </font></span><br />
DBCC REINDEX<span style="display: none;"><font face="Tahoma"> R^2 ? e </font></span><br />
DBCC
INDEXDEFRAG<span style="display: none;"><font face="Tahoma"> LMjGy fT
</font></span><br />
--收缩数据和日志<span style="display: none;"><font face="Tahoma"> )m! `
DGd[ </font></span><br />
DBCC SHRINKDB<span style="display: none;"><font face="Tahoma"> ur l GyEF </font></span><br />
DBCC SHRINKFILE<span style="display: none;"><font face="Tahoma"> | ~ 7J %G </font></span><br />
<span style="display: none;"><font face="Tahoma">8N :Io U$2
</font></span><br />
3、压缩数据库<span style="display: none;"><font face="Tahoma"> T?u
+4\`&amp; </font></span><br />
dbcc shrinkdatabase(dbname)<span style="display: none;"><font face="Tahoma"> jEe+;v&amp;rx </font></span><br />
<span style="display: none;"><font face="Tahoma">f[=p4L/^&gt;
</font></span><br />
4、转移数据库给新用户以已存在用户权限<span style="display: none;"><font face="Tahoma"> = dB rO0CI </font></span><br />
exec sp_change_users_login
'update_one','newname','oldname'<span style="display: none;"><font face="Tahoma">
m/Tzg4vm </font></span><br />
go<span style="display: none;"><font face="Tahoma">
&amp; 6 \fe E </font></span><br />
<span style="display: none;"><font face="Tahoma">";e 7R n2 </font></span><br />
5、检查备份集<span style="display: none;"><font face="Tahoma"> +Z W# g.J </font></span><br />
RESTORE VERIFYONLY from
disk='E:\dvbbs.bak'<span style="display: none;"><font face="Tahoma"> J{U^38Jk 9
</font></span><br />
<span style="display: none;"><font face="Tahoma">U 3, 2
</font></span><br />
6、修复数据库<span style="display: none;"><font face="Tahoma"> eG8g-7u
</font></span><br />
ALTER DATABASE [dvbbs] SET SINGLE_USER<span style="display: none;"><font face="Tahoma"> qj [\' a </font></span><br />
GO<span style="display: none;"><font face="Tahoma"> }\ z/x8 </font></span><br />
DBCC
CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK<span style="display: none;"><font face="Tahoma"> $canzN0t ` </font></span><br />
GO<span style="display: none;"><font face="Tahoma"> 2pvmv} A </font></span><br />
ALTER
DATABASE [dvbbs] SET MULTI_USER<span style="display: none;"><font face="Tahoma">
/N2bT}.E </font></span><br />
GO<span style="display: none;"><font face="Tahoma"> a-B
.c eZX </font></span><br />
<span style="display: none;"><font face="Tahoma">x Q
G&lt;Cd% </font></span><br />
7、日志清除<span style="display: none;"><font face="Tahoma">
zRNL Te\ </font></span><br />
SET NOCOUNT ON<span style="display: none;"><font face="Tahoma"> $|G 89JI- </font></span><br />
DECLARE @LogicalFileName sysname,<span style="display: none;"><font face="Tahoma"> }( Y&gt;PP.U
</font></span><br />
@MaxMinutes INT,<span style="display: none;"><font face="Tahoma">
ajQu UI </font></span><br />
@NewSize INT<span style="display: none;"><font face="Tahoma"> E+g?vfd +L </font></span><br />
<span style="display: none;"><font face="Tahoma">`y4%MEHpb2 </font></span><br />
<span style="display: none;"><font face="Tahoma">/_^s kIX </font></span><br />
USE tablename -- 要操作的数据库名<span style="display: none;"><font face="Tahoma"> 0 2 )dAc </font></span><br />
SELECT
@LogicalFileName = 'tablename_log', -- 日志文件名<span style="display: none;"><font face="Tahoma"> 67{ H NNh </font></span><br />
@MaxMinutes = 10, -- Limit on time
allowed to wrap log.<span style="display: none;"><font face="Tahoma"> 4c5(N",{
</font></span><br />
@NewSize = 1 -- 你想设定的日志文件的大小(M)<span style="display: none;"><font face="Tahoma"> ) F%Ui l'0 </font></span><br />
<span style="display: none;"><font face="Tahoma">d% Do|V </font></span><br />
-- Setup /
initialize<span style="display: none;"><font face="Tahoma"> H mYF &lt;"g+
</font></span><br />
DECLARE @OriginalSize int<span style="display: none;"><font face="Tahoma"> #acx"?b&# </font></span><br />
SELECT @OriginalSize = size <span style="display: none;"><font face="Tahoma">Q 4 lM`!&gt; </font></span><br />
FROM
sysfiles<span style="display: none;"><font face="Tahoma"> f I ;v{ R
</font></span><br />
WHERE name = @LogicalFileName<span style="display: none;"><font face="Tahoma"> -}# I*L </font></span><br />
SELECT 'Original Size of ' + db_name() +
' LOG is ' + <span style="display: none;"><font face="Tahoma">Q_H+M iW]
</font></span><br />
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + <span style="display: none;"><font face="Tahoma">1u Ob'SF
</font></span><br />
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'<span style="display: none;"><font face="Tahoma"> 7_oV0KUk " </font></span><br />
FROM
sysfiles<span style="display: none;"><font face="Tahoma"> L rXlb,tg
</font></span><br />
WHERE name = @LogicalFileName<span style="display: none;"><font face="Tahoma"> \J94ny ^I[ </font></span><br />
CREATE TABLE DummyTrans<span style="display: none;"><font face="Tahoma"> W% sB F :
</font></span><br />
(DummyColumn char (8000) not null)<span style="display: none;"><font face="Tahoma"> gc-et7L. c </font></span><br />
<span style="display: none;"><font face="Tahoma">&lt;a BjRAb 8 </font></span><br />
<span style="display: none;"><font face="Tahoma">. O&amp;c"ZJCD </font></span><br />
DECLARE
@Counter INT,<span style="display: none;"><font face="Tahoma"> b CFH(7 K
</font></span><br />
@StartTime DATETIME,<span style="display: none;"><font face="Tahoma"> B k^qLZ J </font></span><br />
@TruncLog VARCHAR(255)<span style="display: none;"><font face="Tahoma"> fr a?j Q] </font></span><br />
SELECT
@StartTime = GETDATE(),<span style="display: none;"><font face="Tahoma">
SKE~0:&amp; </font></span><br />
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH
TRUNCATE_ONLY'<span style="display: none;"><font face="Tahoma"> Se ~ ) ]
</font></span><br />
<span style="display: none;"><font face="Tahoma">Ws4"_' vaM
</font></span><br />
DBCC SHRINKFILE (@LogicalFileName, @NewSize)<span style="display: none;"><font face="Tahoma"> lS j $\ </font></span><br />
EXEC
(@TruncLog)<span style="display: none;"><font face="Tahoma"> $)e?seJE?s
</font></span><br />
-- Wrap the log if necessary.<span style="display: none;"><font face="Tahoma"> c( sHn+tH </font></span><br />
WHILE @MaxMinutes &gt; DATEDIFF (mi,
@StartTime, GETDATE()) -- time has not expired<span style="display: none;"><font face="Tahoma"> F{ z{= ZR </font></span><br />
AND @OriginalSize = (SELECT size FROM
sysfiles WHERE name = @LogicalFileName) <span style="display: none;"><font face="Tahoma">w 1'{ xA </font></span><br />
AND (@OriginalSize * 8 /1024) &gt;
@NewSize <span style="display: none;"><font face="Tahoma">a{0V~eyM
</font></span><br />
BEGIN -- Outer loop.<span style="display: none;"><font face="Tahoma"> | uxkU </font></span><br />
SELECT @Counter = 0<span style="display: none;"><font face="Tahoma"> Ql &lt;tBW_ </font></span><br />
WHILE
((@Counter &lt; @OriginalSize / 16) AND (@Counter &lt; 50000))<span style="display: none;"><font face="Tahoma"> `p$m +* m </font></span><br />
BEGIN --
update<span style="display: none;"><font face="Tahoma"> M `&lt;&amp;EwT ~
</font></span><br />
INSERT DummyTrans VALUES ('Fill Log') <span style="display: none;"><font face="Tahoma">.).5 = H` </font></span><br />
DELETE
DummyTrans<span style="display: none;"><font face="Tahoma"> 7 ]F .x
</font></span><br />
SELECT @Counter = @Counter + 1<span style="display: none;"><font face="Tahoma"> fN _v m Uu </font></span><br />
END <span style="display: none;"><font face="Tahoma">:Vj A -:V </font></span><br />
EXEC
(@TruncLog) <span style="display: none;"><font face="Tahoma">:Gm 0Q[1 I
</font></span><br />
END <span style="display: none;"><font face="Tahoma">&lt;XY O5OH2
</font></span><br />
SELECT 'Final Size of ' + db_name() + ' LOG is ' +<span style="display: none;"><font face="Tahoma"> ,*-{G6%K3?
</font></span><br />
CONVERT(VARCHAR(30),size) + ' 8K pages or ' + <span style="display: none;"><font face="Tahoma">nwTf)7 0
</font></span><br />
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'<span style="display: none;"><font face="Tahoma"> l,9 fT}n) </font></span><br />
FROM
sysfiles <span style="display: none;"><font face="Tahoma">RLHyzQ h
</font></span><br />
WHERE name = @LogicalFileName<span style="display: none;"><font face="Tahoma"> T-b &amp;Vt&lt; </font></span><br />
DROP TABLE DummyTrans<span style="display: none;"><font face="Tahoma"> ~ 8D&lt;RcQ h </font></span><br />
SET
NOCOUNT OFF <span style="display: none;"><font face="Tahoma">)~[ c L
</font></span><br />
<span style="display: none;"><font face="Tahoma">9 p)Gl o%B
</font></span><br />
8、说明：更改某个表<span style="display: none;"><font face="Tahoma"> \D8
T9 3&gt;o </font></span><br />
exec sp_changeobjectowner 'tablename','dbo'<span style="display: none;"><font face="Tahoma"> [\CAE&lt; = f </font></span><br />
<span style="display: none;"><font face="Tahoma">)g\@R +Y 0
</font></span><br />
9、存储更改全部表<span style="display: none;"><font face="Tahoma"> Yf$8*Z
Dd </font></span><br />
<span style="display: none;"><font face="Tahoma">Ee)0 FNL
</font></span><br />
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch<span style="display: none;"><font face="Tahoma"> v eKKsr </font></span><br />
@OldOwner as
NVARCHAR(128),<span style="display: none;"><font face="Tahoma"> =(A9{L 4D
</font></span><br />
@NewOwner as NVARCHAR(128)<span style="display: none;"><font face="Tahoma"> ^;xf-} B- </font></span><br />
AS<span style="display: none;"><font face="Tahoma"> {&gt; EGp2 </font></span><br />
<span style="display: none;"><font face="Tahoma">/W5 {*E$ </font></span><br />
DECLARE @Name as NVARCHAR(128)<span style="display: none;"><font face="Tahoma"> bgZr3v" Q </font></span><br />
DECLARE
@Owner as NVARCHAR(128)<span style="display: none;"><font face="Tahoma"> - }iOvp# T
</font></span><br />
DECLARE @OwnerName as NVARCHAR(128)<span style="display: none;"><font face="Tahoma"> zv&amp;_gWf Je </font></span><br />
<span style="display: none;"><font face="Tahoma">Od* {0W{ </font></span><br />
DECLARE
curObject CURSOR FOR <span style="display: none;"><font face="Tahoma">!W4s&lt;P9
</font></span><br />
select 'Name' = name,<span style="display: none;"><font face="Tahoma"> i LoH I </font></span><br />
'Owner' = user_name(uid)<span style="display: none;"><font face="Tahoma"> &amp; `jT&gt;q Z </font></span><br />
from
sysobjects<span style="display: none;"><font face="Tahoma"> y[uI6 61I
</font></span><br />
where user_name(uid)=@OldOwner<span style="display: none;"><font face="Tahoma"> 9/*hQ_|P1d </font></span><br />
order by
name<span style="display: none;"><font face="Tahoma"> dc !og &gt;_
</font></span><br />
<span style="display: none;"><font face="Tahoma">qr KOu% F
</font></span><br />
OPEN curObject<span style="display: none;"><font face="Tahoma">
VQ # `&lt;j </font></span><br />
FETCH NEXT FROM curObject INTO @Name, @Owner<span style="display: none;"><font face="Tahoma"> B? 1 C :}
</font></span><br />
WHILE(@@FETCH_STATUS=0)<span style="display: none;"><font face="Tahoma"> cGnUl.|!#D </font></span><br />
BEGIN <span style="display: none;"><font face="Tahoma">"6Z)JM?\N} </font></span><br />
if
@Owner=@OldOwner <span style="display: none;"><font face="Tahoma">;={D (WJ%|
</font></span><br />
begin<span style="display: none;"><font face="Tahoma"> }w YLNA x
</font></span><br />
set @OwnerName = @OldOwner + '.' + rtrim(@Name)<span style="display: none;"><font face="Tahoma"> |lV@k&gt;p@~ </font></span><br />
exec
sp_changeobjectowner @OwnerName, @NewOwner<span style="display: none;"><font face="Tahoma"> DiK F .D 0 </font></span><br />
end<span style="display: none;"><font face="Tahoma"> w mk" |\O] </font></span><br />
-- select
@name,@NewOwner,@OldOwner<span style="display: none;"><font face="Tahoma"> 6P(
zlmW-x </font></span><br />
<span style="display: none;"><font face="Tahoma">A
:X8u9^'L </font></span><br />
FETCH NEXT FROM curObject INTO @Name, @Owner<span style="display: none;"><font face="Tahoma"> / *@z:m1&gt;e
</font></span><br />
END<span style="display: none;"><font face="Tahoma"> QF&gt; 9LF~;
</font></span><br />
<span style="display: none;"><font face="Tahoma">MG^&amp;2R
</font></span><br />
close curObject<span style="display: none;"><font face="Tahoma">
i { \LI:t </font></span><br />
deallocate curObject<span style="display: none;"><font face="Tahoma"> W #z? h </font></span><br />
GO<span style="display: none;"><font face="Tahoma"> Mp _C9 </font></span><br />
<span style="display: none;"><font face="Tahoma">+ L a]U?!B </font></span><br />
<span style="display: none;"><font face="Tahoma">U&gt; &amp;n\U* k
</font></span><br />
10、SQL SERVER中直接循环写入数据<span style="display: none;"><font face="Tahoma"> 48w v qU+ </font></span><br />
declare @i int<span style="display: none;"><font face="Tahoma"> 'b{ vy8@9 </font></span><br />
set
@i=1<span style="display: none;"><font face="Tahoma"> T@/ w6JC$
</font></span><br />
while @i&lt;30<span style="display: none;"><font face="Tahoma"> U
^6 s3 \u </font></span><br />
begin<span style="display: none;"><font face="Tahoma">
VP 5MQr </font></span><br />
insert into test (userid) values(@i)<span style="display: none;"><font face="Tahoma"> J?F~ |#y] </font></span><br />
set
@i=@i+1<span style="display: none;"><font face="Tahoma"> (lx R5 ,`
</font></span><br />
end<span style="display: none;"><font face="Tahoma"> !_/ \F9 !Q
</font></span><br />
<span style="display: none;"><font face="Tahoma">W r ` *e5
</font></span><br />
小记存储过程中经常用到的本周，本月，本年函数 <span style="display: none;"><font face="Tahoma">$/j N@ %Hi </font></span><br />
Dateadd(wk,datediff(wk,0,getdate()),-1)
<span style="display: none;"><font face="Tahoma">&amp;lq2vNS f&lt;
</font></span><br />
Dateadd(wk,datediff(wk,0,getdate()),6) <span style="display: none;"><font face="Tahoma">O , }W z! </font></span><br />
<span style="display: none;"><font face="Tahoma">% $cX"p
</font></span><br />
Dateadd(mm,datediff(mm,0,getdate()),0) <span style="display: none;"><font face="Tahoma">;bx'&gt;|Me7
</font></span><br />
Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0)) <span style="display: none;"><font face="Tahoma">iVU e'fT </font></span><br />
<span style="display: none;"><font face="Tahoma">Q3V ln8&lt;z
</font></span><br />
Dateadd(yy,datediff(yy,0,getdate()),0) <span style="display: none;"><font face="Tahoma">` /,WdX@
</font></span><br />
Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
<span style="display: none;"><font face="Tahoma">Q:=B6 8 S </font></span><br />
<span style="display: none;"><font face="Tahoma">v&lt;nt p &amp;ya
</font></span><br />
上面的SQL代码只是一个时间段 <span style="display: none;"><font face="Tahoma">rX v W"&gt; t
</font></span><br />
Dateadd(wk,datediff(wk,0,getdate()),-1) <span style="display: none;"><font face="Tahoma">o L^ XcU&gt;
</font></span><br />
Dateadd(wk,datediff(wk,0,getdate()),6) <span style="display: none;"><font face="Tahoma">cuM ?Zxe* </font></span><br />
就是表示本周时间段.
<span style="display: none;"><font face="Tahoma">jf 43h
</font></span><br />
下面的SQL的条件部分,就是查询时间段在本周范围内的: <span style="display: none;"><font face="Tahoma">M &gt; UI G&gt;a </font></span><br />
Where Time BETWEEN
Dateadd(wk,datediff(wk,0,getdate()),-1) AND
Dateadd(wk,datediff(wk,0,getdate()),6) <span style="display: none;"><font face="Tahoma">Tr" Y rd </font></span><br />
而在存储过程中 <span style="display: none;"><font face="Tahoma">E R3:o/P-} </font></span><br />
select @begintime =
Dateadd(wk,datediff(wk,0,getdate()),-1) <span style="display: none;"><font face="Tahoma">f P #8 ea </font></span><br />
select @endtime =
Dateadd(wk,datediff(wk,0,getdate()),6)<span style="display: none;"><font face="Tahoma"> 0 `\ B sX] </font></span><br />
<br />
<span style="display: none;"><font face="Tahoma">o. =2 3 </font></span><img src ="http://www.blogjava.net/sbtvij/aggbug/338645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sbtvij/" target="_blank">神話</a> 2010-11-21 23:43 <a href="http://www.blogjava.net/sbtvij/articles/338645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>比较常用的SQL语句语法(Oracle)</title><link>http://www.blogjava.net/sbtvij/articles/338644.html</link><dc:creator>神話</dc:creator><author>神話</author><pubDate>Sun, 21 Nov 2010 15:41:00 GMT</pubDate><guid>http://www.blogjava.net/sbtvij/articles/338644.html</guid><wfw:comment>http://www.blogjava.net/sbtvij/comments/338644.html</wfw:comment><comments>http://www.blogjava.net/sbtvij/articles/338644.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sbtvij/comments/commentRss/338644.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sbtvij/services/trackbacks/338644.html</trackback:ping><description><![CDATA[一.数据控制语句 (DML) 部分<br />
1.INSERT&nbsp;&nbsp; (往数据表里插入记录的语句)<br />
INSERT INTO 表名(字段名1, 字段名2, &#8230;&#8230;) VALUES ( 值1, 值2, &#8230;&#8230;); <br />
INSERT INTO 表名(字段名1, 字段名2, &#8230;&#8230;)&nbsp;&nbsp; SELECT 字段名1, 字段名2, &#8230;&#8230; FROM 另外的表名;<br />
字符串类型的字段值必须用单引号括起来, 例如: &#8217;GOOD DAY&#8217;<br />
如果字段值里包含单引号&#8217; 需要进行字符串转换, 我们把它替换成两个单引号''. <br />
字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.<br />
日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒<br />
或者用字符串转换成日期型函数TO_DATE(&#8216;2001-08-01&#8217;,&#8217;YYYY-MM-DD&#8217;)<br />
TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC. <br />
年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS<br />
INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包.<br />
INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号<br />
CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1&nbsp;&nbsp; START&nbsp;&nbsp; WITH&nbsp;&nbsp; 1 <br />
MAXVALUE&nbsp;&nbsp; 99999&nbsp;&nbsp; CYCLE&nbsp;&nbsp; NOCACHE;<br />
其中最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999<br />
INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL<br />
2.DELETE&nbsp;&nbsp; (删除数据表里记录的语句)<br />
DELETE FROM表名 WHERE 条件;<br />
注意：删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.<br />
如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间<br />
TRUNCATE TABLE 表名; <br />
此操作不可回退.<br />
3.UPDATE&nbsp;&nbsp; (修改数据表里记录的语句)<br />
UPDATE表名 SET 字段名1=值1, 字段名2=值2, &#8230;&#8230; WHERE 条件;<br />
如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验; <br />
值N超过定义的长度会出错, 最好在插入前进行长度校验..<br />
注意事项: <br />
A. 以上SQL语句对表都加上了行级锁,<br />
确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效, <br />
否则改变不一定写入数据库里. <br />
如果想撤回这些操作, 可以用命令 ROLLBACK 复原.<br />
B. 在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围, <br />
应该把它限定在较小 (一万条记录) 范围内,. 否则ORACLE处理这个事物用到很大的回退段. <br />
程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成, <br />
其间加上COMMIT 确认事物处理.<br />
二.数据定义 (DDL) 部分<br />
1.CREATE (创建表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)<br />
ORACLE常用的字段类型有<br />
CHAR 固定长度的字符串<br />
VARCHAR2 可变长度的字符串<br />
NUMBER(M,N) 数字型M是位数总长度, N是小数的长度<br />
DATE 日期类型<br />
创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面<br />
创建表时可以用中文的字段名, 但最好还是用英文的字段名<br />
创建表时可以给字段加上默认值, 例如 DEFAULT SYSDATE<br />
这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间<br />
创建表时可以给字段加上约束条件<br />
例如 不允许重复 UNIQUE, 关键字 PRIMARY KEY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
2.ALTER (改变表, 索引, 视图等)<br />
改变表的名称<br />
ALTER TABLE 表名1&nbsp;&nbsp; TO 表名2;<br />
在表的后面增加一个字段<br />
ALTER TABLE表名 ADD 字段名 字段名描述;<br />
修改表里字段的定义描述<br />
ALTER TABLE表名 MODIFY字段名 字段名描述;<br />
给表里的字段加上约束条件<br />
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名);<br />
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名);<br />
把表放在或取出数据库的内存区<br />
ALTER TABLE 表名 CACHE;<br />
ALTER TABLE 表名 NOCACHE;<br />
3.DROP (删除表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)<br />
删除表和它所有的约束条件<br />
DROP TABLE 表名 CASCADE CONSTRAINTS;<br />
4.TRUNCATE (清空表里的所有记录, 保留表的结构)<br />
TRUNCATE 表名;<br />
三.查询语句 (SELECT) 部分<br />
SELECT字段名1, 字段名2, &#8230;&#8230; FROM 表名1, [表名2, &#8230;&#8230;] WHERE 条件; <br />
字段名可以带入函数<br />
&nbsp;&nbsp; 例如:&nbsp;&nbsp; COUNT(*), MIN(字段名),&nbsp;&nbsp; MAX(字段名), VG(字段名), DISTINCT(字段名), <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')<br />
NVL(EXPR1, EXPR2)函数<br />
解释: <br />
IF EXPR1=NULL<br />
RETURN EXPR2<br />
ELSE<br />
&nbsp;&nbsp; RETURN EXPR1<br />
DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数<br />
解释: <br />
IF AA=V1 THEN RETURN R1<br />
IF AA=V2 THEN RETURN R2<br />
..&#8230;<br />
ELSE<br />
RETURN NULL<br />
LPAD(char1,n,char2)函数<br />
解释:<br />
字符char1按制定的位数n显示，不足的位数用char2字符串替换左边的空位<br />
字段名之间可以进行算术运算<br />
例如:&nbsp;&nbsp; (字段名1*字段名1)/3<br />
查询语句可以嵌套<br />
例如: SELECT &#8230;&#8230; FROM <br />
(SELECT &#8230;&#8230; FROM表名1, [表名2, &#8230;&#8230;] WHERE 条件) WHERE 条件2;<br />
两个查询语句的结果可以做集合操作<br />
例如: 并集UNION(去掉重复记录), 并集UNION ALL(不去掉重复记录), 差集MINUS,&nbsp;&nbsp; 交集INTERSECT<br />
分组查询<br />
SELECT字段名1, 字段名2, &#8230;&#8230; FROM 表名1, [表名2, &#8230;&#8230;] GROUP BY字段名1 <br />
[HAVING 条件] ;<br />
两个以上表之间的连接查询<br />
SELECT字段名1, 字段名2, &#8230;&#8230; FROM 表名1, [表名2, &#8230;&#8230;] WHERE <br />
表名1.字段名 = 表名2. 字段名 [ AND &#8230;&#8230;] ;<br />
SELECT字段名1, 字段名2, &#8230;&#8230; FROM 表名1, [表名2, &#8230;&#8230;] WHERE <br />
表名1.字段名 = 表名2. 字段名(+) [ AND &#8230;&#8230;] ;<br />
有(+)号的字段位置自动补空值<br />
查询结果集的排序操作, 默认的排序是升序ASC, 降序是DESC<br />
SELECT字段名1, 字段名2, &#8230;&#8230; FROM 表名1, [表名2, &#8230;&#8230;] <br />
ORDER BY字段名1, 字段名2 DESC;<br />
字符串模糊比较的方法<br />
INSTR(字段名, &#8216;字符串&#8217;)&gt;0 <br />
字段名 LIKE&nbsp;&nbsp; &#8216;字符串%&#8217;&nbsp;&nbsp; [&#8216;%字符串%&#8217;]<br />
每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性. <br />
四.ORACLE里常用的数据对象 (SCHEMA)<br />
1.索引 (INDEX)<br />
CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, &#8230;&#8230;] );<br />
ALTER INDEX 索引名 REBUILD;<br />
一个表的索引最好不要超过三个 (特殊的大表除外), 最好用单字段索引, 结合SQL语句的分析执行情况, <br />
也可以建立多字段的组合索引和基于函数的索引<br />
ORACLE8.1.7字符串可以索引的最大长度为1578 单字节<br />
ORACLE8.0.6字符串可以索引的最大长度为758 单字节<br />
ORACLE DOC上说字符串最大可以建索引的长度约是:数据块的大小(db_block_size)*40%<br />
2.视图 (VIEW)<br />
CREATE VIEW 视图名AS SELECT &#8230;. FROM &#8230;..;<br />
ALTER VIEW视图名 COMPILE;<br />
视图仅是一个SQL查询语句, 它可以把表之间复杂的关系简洁化.<br />
3.同义词 (SYNONMY)<br />
CREATE SYNONYM同义词名FOR 表名;<br />
CREATE SYNONYM同义词名FOR 表名@数据库链接名;<br />
4.数据库链接 (DATABASE LINK)<br />
CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING &#8216;数据库连接字符串&#8217;;&nbsp;&nbsp;&nbsp; <br />
数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.<br />
数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样<br />
数据库全局名称可以用以下命令查出<br />
SELECT * FROM GLOBAL_NAME;<br />
查询远端数据库里的表<br />
SELECT &#8230;&#8230; FROM 表名@数据库链接名;<br />
五.权限管理 (DCL) 语句<br />
1.GRANT 赋于权限<br />
常用的系统权限集合有以下三个:<br />
CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理)<br />
常用的数据对象权限有以下五个:<br />
ALL ON 数据对象名, SELECT ON 数据对象名, UPDATE ON 数据对象名,<br />
DELETE ON 数据对象名,&nbsp;&nbsp; INSERT ON 数据对象名, ALTER&nbsp;&nbsp; ON 数据对象名<br />
GRANT CONNECT, RESOURCE TO 用户名;<br />
GRANT SELECT ON 表名 TO 用户名;<br />
GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;<br />
2.REVOKE 回收权限<br />
REVOKE CONNECT, RESOURCE FROM 用户名;<br />
REVOKE SELECT ON 表名 FROM 用户名;<br />
REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2; 以下是MS SQL<br />
SQL分类：<br />
DDL—数据定义语言(CREATE，ALTER，DROP，DECLARE)<br />
DML—数据操纵语言(SELECT，DELETE，UPDATE，INSERT)<br />
DCL—数据控制语言(GRANT，REVOKE，COMMIT，ROLLBACK)<br />
首先,简要介绍基础语句：<br />
1、说明：创建数据库<br />
CREATE DATABASE database-name<br />
2、说明：删除数据库<br />
drop database dbname<br />
3、说明：备份sql server<br />
--- 创建 备份数据的 device<br />
USE master<br />
EXEC sp_addumpdevice 'disk', 'testBack', <br />
'c:\mssql7backup\MyNwind_1.dat'<br />
--- 开始 备份<br />
BACKUP DATABASE pubs TO testBack<br />
4、说明：创建新表<br />
create table tabname(col1 type1 [not null] [primary key],col2 <br />
type2 [not null],..)<br />
根据已有的表创建新表：<br />
A：create table tab_new like tab_old (使用旧表创建新表)<br />
B：create table tab_new as select col1,col2&#8230; from tab_old <br />
definition only<br />
5、说明：删除新表drop table tabname<br />
6、说明：增加一个列<br />
Alter table tabname add column col type<br />
注：列增加后将不能删除。DB2中列加上后数据类型也不能改变，唯一能改变的是增加varchar类型的长度。<br />
7、说明：添加主键： Alter table tabname add primary key(col)<br />
说明：删除主键： Alter table tabname drop primary key(col)<br />
8、说明：创建索引：create [unique] index idxname on tabname(col&#8230;.)<br />
删除索引：drop index idxname<br />
注：索引是不可更改的，想更改必须删除重新建。<br />
9、说明：创建视图：create view viewname as select statement<br />
删除视图：drop view viewname<br />
10、说明：几个简单的基本的sql语句<br />
选择：select * from table1 where 范围<br />
插入：insert into table1(field1,field2) values(value1,value2)<br />
删除：delete from table1 where 范围<br />
更新：update table1 set field1=value1 where 范围<br />
查找：select * from table1 where field1 like &#8217;%value1%&#8217; --<br />
-like的语法很精妙，查资料!<br />
排序：select * from table1 order by field1,field2 [desc]<br />
总数：select count * as totalcount from table1<br />
求和：select sum(field1) as sumvalue from table1<br />
平均：select avg(field1) as avgvalue from table1<br />
最大：select max(field1) as maxvalue from table1<br />
最小：select min(field1) as minvalue from table1<br />
11、说明：几个高级查询运算词<br />
A： UNION 运算符<br />
UNION 运算符通过组合其他两个结果表（例如 TABLE1 和 TABLE2）并消去<br />
表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时（即 <br />
UNION ALL），不消除重复行。两种情况下，派生表的每一行不是来自 <br />
TABLE1 就是来自 TABLE2。<br />
B： EXCEPT 运算符<br />
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所<br />
有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT <br />
ALL)，不消除重复行。<br />
C： INTERSECT 运算符<br />
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL)，不消除重复行。<br />
注：使用运算词的几个查询结果行必须是一致的。<br />
12、说明：使用外连接<br />
A、left outer join：<br />
左外连接（左连接）：结果集几包括连接表的匹配行，也包括左连接表的所有行。<br />
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN <br />
b ON a.a = b.c<br />
B：right outer join:<br />
右外连接(右连接)：结果集既包括连接表的匹配连接行，也包括右连接表的所有行。<br />
C：full outer join：<br />
全外连接：不仅包括符号连接表的匹配行，还包括两个连接表中的所有记录。<br />
其次，大家来看一些不错的sql语句<br />
1、说明：复制表(只复制结构,源表名：a 新表名：b) (Access可用)<br />
法一：select * into b from a where 1&lt;&gt;1<br />
法二：select top 0 * into b from a<br />
2、说明：拷贝表(拷贝数据,源表名：a 目标表名：b) (Access可用)<br />
insert into b(a, b, c) select d,e,f from b;<br />
3、说明：跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)<br />
insert into b(a, b, c) select d,e,f from b in &#8216;具体数据库&#8217; <br />
where 条件<br />
例子：..from b in '"&amp;Server.MapPath(".")&amp;"\data.mdb" &amp;"' where..<br />
4、说明：子查询(表名1：a 表名2：b)<br />
select a,b,c from a where a IN (select d from b ) 或者: <br />
select a,b,c from a where a IN (1,2,3)<br />
5、说明：显示文章、提交人和最后回复时间<br />
select a.title,a.username,b.adddate from table a,(select <br />
max(adddate) adddate from table where table.title=a.title) b<br />
6、说明：外连接查询(表名1：a 表名2：b)<br />
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON <br />
a.a = b.c<br />
7、说明：在线视图查询(表名1：a )<br />
select * from (SELECT a,b,c FROM a) T where t.a &gt; 1;<br />
8、说明：between的用法,between限制查询数据范围时包括了边界值,not <br />
between不包括<br />
select * from table1 where time between time1 and time2<br />
select a,b,c, from table1 where a not between 数值1 and 数值2<br />
9、说明：in 的使用方法<br />
select * from table1 where a [not] in (&#8216;值1&#8217;,&#8217;值2&#8217;,&#8217;值4&#8217;,&#8217;值6&#8217;)<br />
10、说明：两张关联表，删除主表中已经在副表中没有的信息<br />
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )<br />
11、说明：四表联查问题：<br />
select * from a left inner join b on a.a=b.b right inner join <br />
c on a.a=c.c inner join d on a.a=d.d where .....<br />
12、说明：日程安排提前五分钟提醒<br />
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())&gt;5<br />
13、说明：一条sql 语句搞定数据库分页<br />
select top 10 b.* from (select top 20 主键字段,排序字段 from 表<br />
名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字<br />
段 order by a.排序字段<br />
14、说明：前10条记录<br />
select top 10 * form table1 where 范围<br />
15、说明：选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)<br />
select a,b,c from tablename ta where a=(select max(a) from <br />
tablename tb where tb.b=ta.b)<br />
16、说明：包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表<br />
(select a from tableA ) except (select a from tableB) except <br />
(select a from tableC)<br />
17、说明：随机取出10条数据<br />
select top 10 * from tablename order by newid()<br />
18、说明：随机选择记录<br />
select newid()<br />
19、说明：删除重复记录<br />
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)<br />
20、说明：列出数据库里所有的表名<br />
select name from sysobjects where type='U'<br />
21、说明：列出表里的所有的<br />
select name from syscolumns where id=object_id('TableName')<br />
22、说明：列示type、vender、pcs字段，以type字段排列，case可以方便地实现多重选择，类似select 中的case。<br />
select type,sum(case vender when 'A' then pcs else 0 <br />
end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type<br />
显示结果：<br />
type vender pcs<br />
电脑 A 1<br />
电脑 A 1<br />
光盘 B 2<br />
光盘 A 2<br />
手机 B 3<br />
手机 C 3<br />
23、说明：初始化表table1<br />
TRUNCATE TABLE table1<br />
24、说明：选择从10到15的记录<br />
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc　　<br />
随机选择数据库记录的方法（使用Randomize函数，通过SQL语句实现）　　对存储在数据库中的数据来说，随机数特性能给出上面的效果，但它们可能太慢了些。你不能要求ASP&#8220;找个随机数&#8221;然后打印出来。实际上常见的解决方案是建立如下所示的循环：<br />
Randomize<br />
RNumber = Int(Rnd*499) +1<br />
While Not objRec.EOF<br />
If objRec("ID") = RNumber THEN<br />
... 这里是执行脚本 ...<br />
end if<br />
objRec.MoveNext<br />
Wend　<br />
这很容易理解。首先，你取出1到500范围之内的一个随机数（假设500就是数据库内记录的总数）。然后，你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495，那么要循环一遍数据库花的时间可就长了。<br />
虽然500这个数字看起来大了些，但相比更为稳固的企业解决方案这还是个小型数据库了，后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了？<br />
采用SQL，你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset，如下所示：<br />
Randomize<br />
RNumber = Int(Rnd*499) + 1　<br />
SQL = "SELECT * FROM Customers WHERE ID = " &amp; RNumber　<br />
set objRec = ObjConn.Execute(SQL)<br />
Response.WriteRNumber &amp; " = " &amp; objRec("ID") &amp; " " &amp; objRec("c_email")　<br />
不必写出RNumber 和ID，你只需要检查匹配情况即可。只要你对以上代码的工作满意，你自可按需操作&#8220;随机&#8221;记录。Recordset没有包含其他内容，因此你很快就能找到你需要的记录这样就大大降低了处理时间。<br />
再谈随机数<br />
现在你下定决心要榨干Random 函数的最后一滴油，那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。<br />
为了取出几条随机选择的记录并存放在同一recordset内，你可以存储三个随机数，然后查询数据库获得匹配这些数字的记录：<br />
SQL = "SELECT * FROM Customers WHERE ID = " &amp; RNumber &amp; " OR <br />
ID = " &amp; RNumber2 &amp; " OR ID = " &amp; RNumber3　<br />
假如你想选出10条记录（也许是每次页面装载时的10条链接的列表），你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成，但是 SELECT 语句只显示一种可能（这里的ID 是自动生成的号码）：<br />
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " &amp; RNumber &amp; <br />
" AND " &amp; RNumber &amp; "+ 9"<br />
注意：以上代码的执行目的不是检查数据库内是否有9条并发记录。<br />
随机读取若干条记录，测试过<br />
Access语法：SELECT top 10 * From 表名 ORDER BY Rnd(id)<br />
Sql server:select top n * from 表名 order by newid()<br />
mysqlelect * From 表名 Order By rand() Limit n<br />
Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有<br />
Access的SQL说明,只有自己测试, 现在记下以备后查)<br />
语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...<br />
使用SQL语句 用...代替过长的字符串显示<br />
语法：<br />
SQL数据库：select case when len(field)&gt;10 then left(field,10)+'...' else field end as news_name,news_id from tablename<br />
Access数据库：SELECT iif(len(field)&gt;2,left(field,2)+'...',field) FROM tablename;　<br />
Conn.Execute说明<br />
Execute方法<br />
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集，该方法的使用格式分为以下两种：<br />
1．执行SQL查询语句时，将返回查询得到的记录集。用法为：<br />
Set 对象变量名=连接对象.Execute("SQL 查询语言")<br />
Execute方法调用后，会自动创建记录集对象，并将查询结果存储在<br />
<br />
该记录对象中，通过Set方法，将记录集赋给指定的对象保存，以后对象变量就代表了该记录集对象。<br />
<br />
2．执行SQL的操作性语言时，没有记录集的返回。此时用法为：<br />
连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]　&#183;RecordAffected 为可选项，此出可放置一个变量，SQL语句执行后，所生效的记录数会自动保存到该变量中。通过访问该变量，就可知道SQL语句队多少条记录进行了操作。<br />
&#183;Option 可选项，该参数的取值通常为adCMDText，它用于告诉ADO，应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数，可使执行更高效。<br />
&#183;BeginTrans、RollbackTrans、CommitTrans方法<br />
这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物；RollbackTrans用于回滚事务；CommitTrans用于提交所有的事务处理结果，即确认事务的处理。<br />
事务处理可以将一组操作视为一个整体，只有全部语句都成功执行后，事务处理才算成功；若其中有一个语句执行失败，则整个处理就算失败，并恢复到处里前的状态。<br />
BeginTrans和CommitTrans用于标记事务的开始和结束，在这两个之间的语句，就是作为事务处理的语句。判断事务处理是否成功，可通过连接对象的Error集合来实现，若Error集合的成员个数不为0，则说明有错误发生，事务处理失败。Error集合中的每一个Error对象，代表一个错误信息。Access基本操作<br />
Access基本操作<br />
一、数据库的基本概念和设计方法<br />
所谓数据库实际上是关于某一特定主题或目标的信息集合。它把大量数据按一定的结构进行存储，集中管理和统一使用这些数据，实现数据共享。在Access中，数据库不仅包含用于存放加工过的信息的表，还包含以表中所存放的信息为操作对象的查询、窗体、报表、页等数据库对象。<br />
一般地，数据库的设计应遵循以下几个步骤：<br />
1、确定创建数据库所要完成的目的。<br />
2、确定创建数据库中所需要的表。<br />
3、确定表中所需要的字段。<br />
4、明确有唯一值的主关键字段。<br />
5、确定表之间的关系。<br />
6、优化设计。<br />
7、输入数据并创建其他数据库对象。<br />
二、创建数据库<br />
在Access中既可以使用人工的方法按照自己的要求来建立数据库，也可以使用软件为用户提供的各种数据库向导，前者更为自由而后者则显然要方便一些。<br />
A、自行创建数据库<br />
使用人工的方法按照自己的要求来建立数据库，首先应创建一个空数据库，然后再将对象加入到数据库中。创建空数据库的步骤为：<br />
1、在启动Access后的Microsoft Access对话框中选择&#8220;空Access数据库&#8221;选项。<br />
2、在弹出的&#8220;文件新建数据库&#8221;对话框中选择数据库存放的位置、输入数据库的名称并单击&#8220;创建&#8221;按钮，进入Access数据库窗口，即完成了空数据库的创建。<br />
B、使用数据库向导创建数据库<br />
Access为用户提供了多种数据库向导，使用数据库向导可以方便地完成数据库的创建工作。具体步骤如下：<br />
1、在启动Access后的Microsoft Access对话框中选择&#8220;Access数据库向导、数据页和项目&#8221;选项。<br />
2、在弹出&#8220;新建&#8221;对话框后单击&#8220;数据库&#8221;选项卡，选择一种数据库。<br />
3、在弹出的&#8220;文件新建数据库&#8221;对话框中，选择数据库存放的位置，输入数据库的名称并单击&#8220;创建&#8221;按钮。<br />
4、依次在数据库向导窗口中为数据库中的各个表选择字段、选择显示样式、确定打印报表所用的样式、输入所建数据库的标题、确定是否在所有报表上加一幅图片，最后启动该数据库，至此就完成了使用向导创建数据库的工作。<br />
三、表的基本概念<br />
表 是数据库中存储数据的最基本的对象，常称为&#8220;基础表&#8221;，是构成数据库的一个重要组成部分。表由若干记录组成，每一行称为一个记录，对应着一个真实的对象； 每一列称为一个字段，对应着对象的一个属性信息。每个表的关键字（关键字可以为一个字段或多个字段）使表中的记录唯一。在表内还可以定义索引，当表内存放 大量数据时可以加速数据的查找。<br />
Access中的所有数据都存放在数据表中。表是一个数据库系统的基础，只有建立表后，才可以建立查询、窗体和报表等其他项目，逐步完善数据库。<br />
四、创建表<br />
Access提供了三种创建新表的方法：<br />
1、使用数据库向导，在一个操作中创建整个数据库所需的全部表、窗体及报表。<br />
2、使用表向导来选择表的字段，这些字段可以从其他已定义好的表中选择。<br />
3、使用设计视图创建表。<br />
不管使用哪一种方法来创建表，随时都可以使用表设计试图来进一步自定义表。由于第一种方法已包含在使用数据库向导创建数据库的内容之中，这里着重说明后两种方法的实现。<br />
A、利用表向导创建表<br />
利用表向导创建新表，一般情况下能满足数据库开发者的要求，至于多余的字段可以用其他的方法将其删除。利用表向导创建表的步骤如下：<br />
1、在数据库窗口中，单击&#8220;对象&#8221;列表中的&#8220;表&#8221;，双击&#8220;使用向导创建表&#8221;。<br />
2、在弹出的&#8220;表向导&#8221;对话框中单击&#8220;表向导&#8221;并单击&#8220;确定&#8221;按钮。<br />
3、在弹出的对话框中选择要使用的表并添加所需要的字段（可以重命名）后单击&#8220;下一步&#8221;按钮。<br />
4、为表指定名称并确认主键，单击&#8220;下一步&#8221;按钮。<br />
5、选择创建完表后的动作，然后单击&#8220;完成&#8221;按钮。<br />
B、利用设计视图创建表<br />
使用设计器建立表的方法有两种：一种方法是直接使用设计器来创建新表，另一种方法是使用表向导来构造一个结构相近的表，然后在设计器中打开修改。下面介绍使用设计器来创建新表的步骤：<br />
1、在数据库窗口中，单击对象列表中的&#8220;表&#8221;，双击&#8220;使用设计器创建表&#8221;的按钮，进入&#8220;新建表&#8221;对话框。<br />
2、在各栏中输入字段名称、选择数据类型，然后设置字段属性。<br />
3、接着选中要设置为关键字的字段，单击&#8220;编辑&#8221;菜单中&#8220;主键&#8221;命令，设置&#8220;主关键字&#8221;，此时在所选字段左边行选定器上出现钥匙标记。<br />
4、保存所设计的表。<br />
五、关于主关键字与建立表间关系<br />
A、设置主关键字<br />
为 了提高Access在查询、窗体和报表操作中的快速查找能力和组合保存在各个不同表中信息的性能，必须为建立的表指定一个主关键字。主关键字可以包含一个 或多个字段，以保证每条记录都有唯一的值。设定主关键字的目的就在于保证表中的所有记录都能够被唯一识别。如果表中没有可以用作唯一识别表中记录的字段， 则可以使用多个字段来组合成主关键字。其设置步骤如下：<br />
1、在表设计器中，单击字段名称左边的字段选择按钮，选择要作为主关键字的字段。单击字段选择按钮的同时按住Ctrl键可以同时选择多个字段。<br />
2、单击&#8220;编辑&#8221;菜单中的&#8220;主键&#8221;命令，则在该字段的左边显示钥匙标记。<br />
B、建立表间关系<br />
在表中定义主关键字除了可以保证每条记录可以被唯一识别外，更重要的作用在于多个表间的连接。当数据库中包含多个表时，需要通过主关键字的连接来建立表间的关系，使各表协同工作。<br />
要在两个表间建立关系，必须在这两个表中拥有相同数据类型的字段。其设置步骤如下：<br />
1、打开表所在的数据库窗口。<br />
2、单击&#8220;工具&#8221;菜单中的&#8220;关系&#8221;命令，弹出&#8220;显示表&#8221;对话框。<br />
3、选择要建立关系的表，然后单击&#8220;添加&#8221;按钮，依次添加完所需要的表后，单击&#8220;关闭&#8221;按钮。<br />
4、在关系对话框中选择其中一表中的主关键字，拖曳到另一表中相同的主关键字，释放鼠表键后，弹出&#8220;编辑关系&#8221;对话框。<br />
5、若在&#8220;编辑关系&#8221;对话框中选中&#8220;实施参照完整性&#8221;和&#8220;级联更新相关字段&#8221;复选框，则使在更新主表中记录的同时更新关系表中的相关记录。<br />
6、若在&#8220;编辑关系&#8221;对话框中选中&#8220;实施参照完整性&#8221;和&#8220;级联删除相关字段&#8221;复选框，则使在删除主表中记录的同时删除关系表中的相关记录。<br />
7、接着单击&#8220;联接类型&#8221;按钮，弹出&#8220;联接属性&#8221;对话框，在此选择联接的方式。<br />
8、在&#8220;编辑关系&#8221;对话框中单击&#8220;创建&#8221;按钮，即在创建关系的表之间有一条线将其连接起来，表示已创建好表之间的关系。<br />
9、关闭关系对话框，按需要选择是否保存关系的设定。<br />
编辑或修改关联性的操作是直接用鼠标在这一条线上双击，然后在弹出的&#8220;编辑关系&#8221;对话框中进行修改。删除关联性的操作是先用鼠标在这一条线上单击，然后再按Delete键删除。<br />
六、记录的基本操作<br />
Access只允许每次操作一个记录，正在操作的记录在行选定器上显示一个&#8220;三角图标&#8221;用于标记当前记录。当改变当前记录的数据但又没有保存时，行选定器上显示一个&#8220;笔型图标&#8221;。<br />
记录的基本操作包括添加记录、修改记录和删除记录。<br />
A、添加记录<br />
打开表的数据视图画面时，表的最末端有一条空白的记录，在记录的行选定器上显示一个星花图标，标示可以从这里开始增加新的记录。单击&#8220;插入&#8221;菜单中的&#8220;新记录&#8221;或直接选定该行即可添加记录。输入完数据后，移到另一个记录时会自动保存该记录。<br />
B、修改记录<br />
可用Tab键或直接用鼠标移到要修改的字段进行修改。<br />
C、删除记录<br />
选择一条或多条记录后按Delete键删除所有选中的记录。<br />
七、总结<br />
读 过本文之后，相信您应该可以轻松地创建一个小型的数据库了，然而相比于Access强大而繁多的功能，这篇文章涉及的仅仅是最最简单和基本的一些操作，关 于查询、窗体、报表、页以及宏与模块的内容将比表的基础操作更为复杂，有兴趣的读者可以查询其它的资料，以便顺利地设计和制作出高质量的应用系统。<br /><img src ="http://www.blogjava.net/sbtvij/aggbug/338644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sbtvij/" target="_blank">神話</a> 2010-11-21 23:41 <a href="http://www.blogjava.net/sbtvij/articles/338644.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一条经典的SQL语句优化实例</title><link>http://www.blogjava.net/sbtvij/articles/338643.html</link><dc:creator>神話</dc:creator><author>神話</author><pubDate>Sun, 21 Nov 2010 15:37:00 GMT</pubDate><guid>http://www.blogjava.net/sbtvij/articles/338643.html</guid><wfw:comment>http://www.blogjava.net/sbtvij/comments/338643.html</wfw:comment><comments>http://www.blogjava.net/sbtvij/articles/338643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sbtvij/comments/commentRss/338643.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sbtvij/services/trackbacks/338643.html</trackback:ping><description><![CDATA[<div class="date">2008-04-07 17:15</div>
<table style="width: 100%; table-layout: fixed;">
    <tbody>
        <tr>
            <td>
            <div id="blog_text" class="cnt">
            <p>一条经典的SQL语句优化实例<br />
            1、概述</p>
            <p>如下SQL语句发生严重消耗资源的问题，使得OS's load average会在30以上，一条语句需要执行上百秒。</p>
            <p><br />
            /*<br />
            PIXPatient 184176条<br />
            DomainPatient 184189条<br />
            PersonName
            184189条<br />
            */</p>
            <p><br />
            捕获的SQL语句：</p>
            <p>select * from PIXPatient where PIXPatientTID<br />
            in (select distinct
            PIXPatientTID from DomainPatient where DomainPatientTID<br />
            in ( select
            DomainPatientTID from DomainPatient<br />
            where PatientBirthday = '1994-01-09' or
            PatientBirthday = '1994-01-01'<br />
            union select DomainPatientTID from PersonName
            where FamilyName = '倪' or GivenName = '界'));</p>
            <p><br />
            2、优化</p>
            <p>a.优化前执行效率：<br />
            mysql&gt; select * from PIXPatient where PIXPatientTID<br />
            in
            (select distinct PIXPatientTID from DomainPatient where DomainPatientTID<br />
            in (
            select DomainPatientTID from DomainPatient<br />
            where PatientBirthday =
            '1994-01-09' or PatientBirthday = '1994-01-01'<br />
            union select DomainPatientTID
            from PersonName where FamilyName = '倪' or GivenName =
            '界'));<br />
            +---------------+--------------+------------------+<br />
            | PIXPatientTID
            | PIXPatientID | PIXPatientStatus
            |<br />
            +---------------+--------------+------------------+<br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17013 |
            17013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 35491 | 35491&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
            active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 39654 | 39654&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
            <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 47351 | 47351&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 77820 |
            77820&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111464 | 111464&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
            active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 151700 | 151700&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
            <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 168993 | 168993&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
            <br />
            +---------------+--------------+------------------+<br />
            8 rows in set (1 min
            58.11 sec)<br />
            8 rows in set (23.80 sec) ---- 空闲时</p>
            <p>b.加索引<br />
            alter table PersonName add index Index_FamilyName (FamilyName), add
            index Index_GivenName (GivenName);<br />
            alter table DomainPatient add index
            Index_PatientBirthday (PatientBirthday);</p>
            <p>效果不明显</p>
            <p>c.重构SQL语句（优化）<br />
            mysql&gt; select * from PIXPatient inner join (<br />
            &nbsp;&nbsp;&nbsp; -&gt;
            select distinct PIXPatientTID from DomainPatient inner join (<br />
            &nbsp;&nbsp;&nbsp; -&gt;
            select DomainPatientTID from DomainPatient where PatientBirthday =
            '1994-01-09'<br />
            &nbsp;&nbsp;&nbsp; -&gt; union select DomainPatientTID from DomainPatient where
            PatientBirthday = '1994-01-01'<br />
            &nbsp;&nbsp;&nbsp; -&gt; union select DomainPatientTID from
            PersonName where FamilyName = '倪'<br />
            &nbsp;&nbsp;&nbsp; -&gt; union select DomainPatientTID
            from PersonName where GivenName = '界' ) a using(DomainPatientTID) ) b
            using(PIXPatientTID)
            ;<br />
            +---------------+--------------+------------------+<br />
            | PIXPatientTID |
            PIXPatientID | PIXPatientStatus
            |<br />
            +---------------+--------------+------------------+<br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 77820 |
            77820&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 168993 | 168993&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
            active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17013 | 17013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
            <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 35491 | 35491&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 39654 |
            39654&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 47351 | 47351&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
            active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111464 | 111464&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
            <br />
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 151700 | 151700&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
            <br />
            +---------------+--------------+------------------+<br />
            8 rows in set (1.11
            sec)<br />
            8 rows in set (0.02 sec) ---- 空闲时</p>
            <p>效果明显</p>
            <p>3、结论</p>
            <p>SQL语句中，尽量避免使用or,in关键字，因为执行效率低。</p>
            <p><br />
            规律：</p>
            <p>join &gt; exists &gt; in</p>
            <p>union &gt; or</p>
            </div>
            </td>
        </tr>
    </tbody>
</table><img src ="http://www.blogjava.net/sbtvij/aggbug/338643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sbtvij/" target="_blank">神話</a> 2010-11-21 23:37 <a href="http://www.blogjava.net/sbtvij/articles/338643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>