亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? generator_api.htm

?? Oracle PL/SQL procedure generator (second generator type)
?? HTM
?? 第 1 頁 / 共 5 頁
字號:
<HTML>
<HEAD>
<TITLE>PL/Generator API</TITLE>
</HEAD>
<BODY bgcolor="white" background="bar_products.gif">
<DIR>
<DIR>
<table border=0 cellspacing=0 cellpadding=0 valign=top  width=650>
<tr><td width="51" valign=top>

<br>

<td valign="top" width="600"> <IMG SRC=generator.gif WIDTH=285 HEIGHT=48>

<br>
<hr>
<P>

<B><FONT SIZE=4>Part 4. Using the PL/Generator API</B></FONT></A> 
<P>

The PL/Generator API or Application Programmatic Interface consists of a set of packages containing programs you can call to modify the behavior of PL/Generator and the code it generates. 
<P>You will learn in Part 3 of this document about the Object Information Repository of PL/Generator, which stores information about the generated code characteristics, and also about a number of other PL/Generator features that are not currently available through the screen interface.
<P>
<A HREF="#InformationRepository"><FONT  SIZE=3>About the PL/Generator Object Information Repository</FONT></A>
<P>
<A HREF="#KeyCharacteristics"><FONT  SIZE=3>Setting Primary Key Characteristics</FONT></A>

<DIR>
<A HREF="#Specifying"><FONT SIZE=2>Specifying the Primary Key</FONT></A><BR>
<A HREF="#Generating"><FONT SIZE=2>Generating the Primary Key</FONT></A><BR>
<A HREF="#Setting"><FONT SIZE=2>Setting Primary Key Descriptor Columns</FONT></A><BR> 
<A HREF="#Primary"><FONT SIZE=2>The Update Primary Key Procedure</FONT></A> <BR>
<P>
</DIR>

<A HREF="#ColumnCharacteristics"><FONT  SIZE=3>Setting Column Characteristics</FONT></A>
<DIR>
<A HREF="#HidingColumns"><FONT SIZE="2">Hiding Columns</FONT></A><BR>
<A HREF="#IndividualColumns"><FONT SIZE="2">Updating Individual Columns</FONT></A><BR>
<A HREF="#ApplyingFunctions"><FONT SIZE="2">Applying Functions to Columns</FONT></A><BR>
<A HREF="#Defining"><FONT SIZE=2>Defining Standard Audit Columns</FONT></A>
</DIR>

<P>
<A HREF="#ErrorHandling"><FONT SIZE=3>Setting Error Handling</FONT></A>
<DIR>
<A HREF="#HandlingMethod"><FONT SIZE="2">Setting the Exception Handling Method</FONT></A>
</DIR>

<P>
<A HREF="#RetrievalOptions"><FONT SIZE="3">Setting Additional Retrieval Options</FONT></A>
<DIR>
<A HREF="#GeneratingCOUNT"><FONT SIZE="2">Generating COUNT Functions</FONT></A><BR>
<A HREF="#insideSQL"><FONT SIZE="2">Enabling Execution of Functions inside SQL</FONT></A>
</DIR>

<P>
<A HREF="#SettingPerformance"><FONT  SIZE=3>Setting Performance/Tracing Options</FONT></A>
<DIR>
<A HREF="#CachingData"><FONT SIZE="2">Caching Data for Faster Access</FONT></A><BR>
<A HREF="#EmployingCursor"><FONT SIZE="2">Employing Cursor Variables</FONT></A><BR>
<A HREF="#RefiningCursor"><FONT SIZE="2">Refining Cursor Select Lists</FONT></A><BR>
<A HREF="#GeneratingStand"><FONT SIZE="2">Generating Stand-alone Programs</FONT></A><BR>
<A HREF="#UsingPLVxmn"><FONT SIZE="2">Using PLVxmn for Execution Tracing</FONT></A>
</DIR>

<P>
<A HREF="#SettingNaming"><FONT  SIZE=3>Setting Naming Standards</FONT></A><P>
<A HREF="#Generatingfrom"><FONT  SIZE=3>Generating from Views</FONT></A><P>
<A HREF="#Miscellaneous"><FONT  SIZE=3>Miscellaneous Settings</FONT></A>
<DIR>
<A HREF="#CompanyName"><FONT SIZE="2">Setting the Company Name</FONT></A>
</DIR>
<P>
<A HREF="#GenerationSession"><FONT  SIZE=3>Registering the Generation Session</FONT></A>
<P>
<A HREF="#Clearing"><FONT  SIZE=3>Clear Object Information Repository Settings</FONT></A><BR>
<DIR>
<A HREF="#ClearSchema"><FONT SIZE="2">Clear Schema</FONT></A><BR>
<A HREF="#ClearObject"><FONT SIZE="2">Clear Object</FONT></A><BR>
<A HREF="#ClearScreens"><FONT SIZE="2">Clear Screens and Individual Fields</FONT></A>
</DIR>
<A HREF="#Customizing"><FONT  SIZE=3>Customizing Generated Code</FONT></A>

<P>
<A HREF="#Managing"><FONT  SIZE=3>Managing Privileges</FONT></A>
<DIR>
<A HREF="#Default"><FONT SIZE="2">Default Privileges</FONT></A><BR>
<A HREF="#Activating"><FONT SIZE="2">Activating the Privileges Mechanism</FONT></A><BR>
<A HREF="#Adding"><FONT SIZE="2">Adding a Privilege</FONT></A><BR>
<A HREF="#Removing"><FONT SIZE="2">Removing a Privilege</FONT></A><BR>
<A HREF="#Validating"><FONT SIZE="2">Validating Access</FONT></A>
</DIR>

<P>
<A HREF="#Code"><FONT  SIZE=3>Validating the Code</FONT></A>
<DIR>
<A HREF="#Identifiers"><FONT SIZE="2">Validating Identifiers</FONT></A><BR>
<A HREF="#Size"><FONT SIZE=2>Reducing Size of Long Identifier Names</FONT></A> <BR>
<A HREF="#Automatic"><FONT SIZE="2">Automatic Invalid Identifier Correction</FONT></A><BR>
<A HREF="#Compile"><FONT SIZE="2">Compile Failures</FONT></A>
</DIR>
<A HREF="#GenDB"><FONT SIZE=3>Generating to the Database</FONT></A> <BR>
<P>
<A HREF="#Avoidance"><FONT SIZE=3>Complete Avoidance of UTL_FILE</FONT></A> <BR>
<P>
<A HREF="#Utility"><FONT  SIZE=3>Export/Import Utility</FONT></A><P>
<A HREF="#Batch"><FONT  SIZE=3>Batch Generation of Code</FONT></A><P>
<A HREF="#Keeping"><FONT  SIZE=3>Keeping Generated Code Current</FONT></A>
<DIR>
<A HREF="#Registering"><FONT SIZE="2">Registering the Generation Session</FONT></A><BR>
<A HREF="#Regenerating"><FONT SIZE="2">Regenerating Code Based on Registered Sessions</FONT></A><BR>
<A HREF="#Automating"><FONT SIZE="2">Automating the Regeneration Process</FONT></A>
</DIR>

<P>

<HR>
<P>


<B><FONT  SIZE=4>
<P>
<A NAME="InformationRepository">About The PL/Generator Object Information Repository</A> 
</B></FONT>
<P>
The PL/Generator Objection Information Repository (OIR) is a database table containing special information about how you want your generated code to look. There are four levels of information within the OIR: <DIR>
<DIR>

<P>Global across schemas (for a specific driver) 
<P>Global within a schema 
<P>For a specific table or view (or other database object) 
<P>For a column in a table </DIR>
</DIR>

<P>
With this hierarchy, you can specify a certain standard approach for all tables within a certain schema and then override that standard for specific tables within the schema. PL/Generator will search from the bottom up on that list until it finds an entry for the specified behavior. 
<P>
The OIR is actually a table named plg_doir, which is created in the PL/Generator schema. The PLGdoir package offers a programmatic interface to this table. The programs in PLGdoir that you will be using are described below in the appropriate sections. 
<P>
You will most likely want to place calls to the appropriate PLGdoir inside a file and then execute that (or the stored procedure created in the file). You will want to avoid calling PLGdoir programs directly from the SQL*Plus command line or other third-party execution environment, because they will not be readily available for re-execution.  
<P>
Remember that most calls to the PLGdoir packaged programs make changes to the underlying table. If you exit from SQL*Plus and autocommit is turned on (the default), those changes will be committed. Generally, though, you will need to commit your changes explicitly before they will be saved and available through another connection to the Oracle database. 
<P>
The following sections show you how to use different aspects of the OIR API. Characteristics of code are defined within the context of a specific driver. In almost every case, therefore, the first argument will be the driver with which you are working.  
<P>
Since the first release of PL/Generator focuses on the generation f table encapsulation packages, the driver used in all examples is the value returned by the call to this named constant: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PLGte.driver </DIR>
</DIR>

</FONT>
<P>
PLGte is the package used to define the driver language within PL/Generator for table encapsulation and driver is a constant containing the name of the driver, which happens to be "TE". 
<P>&nbsp; 
<B>
<FONT  SIZE=4><P><A NAME="KeyCharacteristics">Setting Primary Key Characteristics</A> 
</B></FONT>
<P>
PL/Generator allows you to work with primary keys in the following ways: 

<UL>
<LI>Define a primary key to PL/Generator if there is not one defined for the table. </LI>
<LI>Specify the method by which the next primary key is generated (i.e., a sequence, function or procedure). </LI>
<LI>Select a unique index as returning the primary key descriptor (a.k.a., name).</LI>
</UL>

<B><I>
<P>
<A NAME="Specifying">Specifying the Primary Key</A> </B></I></FONT>

<P>
Unlike most PL/SQL code generators, PL/Generator allows you to generate packages for tables that do not have a primary key defined. If this is the case, you can specify columns in OIR to be treated as part of the primary key for purposes of code generation. 
<P>
To define a column as being part of the table's primary key, call the following program: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PROCEDURE PLGdoir.setpkycol (<BR>
   drv IN VARCHAR2,<BR>
   tab IN VARCHAR2, <BR>
   col IN VARCHAR2, <BR>
   pos IN INTEGER := 1, <BR>
   sch IN VARCHAR2 := NULL);  </DIR>
</DIR>

</FONT>
<P>
where <I>tab</I> is the name of the table, <I>col</I> is the name of the column, <I>pos</I> is the position in the primary key (see note below concerning this value) and <I>sch</I> is the schema in which the table is located (the default of NULL is interpreted to be the current schema). 
<P>
Suppose, for example, that we have the following table definition and no primary key: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>CREATE TABLE store (<BR>
   region_id NUMBER,<BR>
   store_id NUMBER,<BR>
   name VARCHAR2(100); </DIR>
</DIR>

</FONT>
<P>
To define the primary key (for purposes of PL/Generator generation) as (region_id, store_id), you would issue the following two calls: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>BEGIN<BR>
   PLGdoir.setpkycol (PLGte.driver, 'store', 'region_id', 1);<BR>
   PLGdoir.setpkycol (PLGte.driver, 'store', 'store_id', 2);<BR>
END; </DIR>
</DIR>

</FONT>
<P>
Notice that I have specified the columns of the primary key in the same order as found in the table. The default position is 1, which means that if I did not specify those two different positions in my calls to PLGdoir.setpkycol, the result would be a primary key definition of just one column: store_id. 
<P>
If you do take this approach to defining the primary key, you should also make sure that a unique index based on these same columns is present. You will then get the same generated code as you would with a real primary key constraint. 
<P>
Note: when you specify multiple primary key columns, they should be defined in the same order they appear in the table definition. That is the order they will appear in the parameter list <I>regardless</I> of the order you specify in calls to PLGdoir.setpkycol. This limitation may change in future releases. 

<B><I><FONT ><P><A NAME="Generating">Generating the primary key</A> </B></I></FONT>

<P>
Sometimes you will supply the primary key when you perform an insert. In many other situations, however, the primary key will be generated, usually by a sequence. PL/Generator supports three different methods for generating a primary key: by sequence, by procedure and by function. If you indicate in OIR that a primary key is generated, then the insert procedure (PKG.ins) will <I>return</I> the primary key in the parameter list as one or more OUT arguments. PL/Generator will also create a PKG.nextpky function that returns the next primary key. 
<P>
To indicate that a primary key is to be generated from a sequence, call the setseqname procedure: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PROCEDURE PLGdoir.setseqname<BR>
   (drv IN VARCHAR2,<BR>
    tab IN VARCHAR2,<BR>
    seq IN VARCHAR2, <BR>
    sch IN VARCHAR2 := NULL); </DIR>
</DIR>

</FONT>
<P>
To indicate that a primary key is to be generated from a procedure, call the setpkyproc procedure: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PROCEDURE PLGdoir.setpkyproc <BR>
   (drv IN VARCHAR2,<BR>
    tab IN VARCHAR2, <BR>
    proc IN VARCHAR2, <BR>
    sch IN VARCHAR2 := NULL); </DIR>
</DIR>

</FONT>
<P>
To indicate that a primary key is to be generated from a function, call the setpkyfunc procedure: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PROCEDURE PLGdoir.setpkyfunc <BR>
   (drv IN VARCHAR2,<BR>
    tab IN VARCHAR2, <BR>
    func IN VARCHAR2, <BR>
    sch IN VARCHAR2 := NULL); </DIR>
</DIR></FONT>


<P>
In the following example I associate a sequence for the emp table: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PLGdoir.setseqname (PLGte.driver, 'emp', 'empno_seq'); </DIR>
</DIR>

</FONT>
<P>
In the next call, I specify that a procedure be called which will in return generate the primary key for the current table: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PLGdoir.setpkyproc (<BR>
   PLGte.driver,<BR>
   'STREET', <BR>
   'location_pkg.ins (location_type_pkg.location_type_name$pky (''STREET''), retval)'); </DIR>
</DIR>

</FONT>
<P>
This is more complex an action than you are likely to take with the OIR. Keep in mind, however, that if you set up a procedure call to generate/return the next primary key, you must return that primary key (a single integer value) through an OUT or IN OUT argument named "retval". 
<P>
These set primary key procedures also allow you to use wild-carding to set this property for multiple tables. Consider the following call: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PLGdoir.setseqname (PLGte.driver, '%', '_pk_seq'); </DIR>
</DIR>

</FONT>
<P>
In this case, PLGdoir detects that the sequence "name" starts with a "_" and so is treated as a suffix. It then identifies the tables which match the first argument (which means all tables, in this case). For each table, it constructs a sequence name of the format &lt;table_name&gt;_pk_seq. If it finds a sequence by that name, then an entry in OIR is recorded.  
<P>
If your sequence "name" ends with a "_", then it is treated as a prefix and the corresponding scan is then performed. 
<P>
At this time, PL/Generator only recognizes the underscore as a prefix or suffix indicator. 

<B><I><P><A NAME="Setting">Setting Primary Key Descriptor Columns</A> </B></I>
<P>
You specify the primary key column(s) in a table-level constraint. But there is usually also another column or columns which serves as the "descriptor" of the table. For example, in the classic emp table, empno is the primary key while ename is the descriptor. The descriptor column is usually unique, but the presence of a unique index on a column is not enough to necessarily identify the descriptor column. To set the descriptor column(s), you will select the unique index which contains those (and only those) columns. 
<P>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一级在线| 国产精品久久久久久久久果冻传媒| 久久99最新地址| 伊人性伊人情综合网| 国产精品二区一区二区aⅴ污介绍| 26uuuu精品一区二区| 欧美三级资源在线| av亚洲精华国产精华| av一区二区不卡| 91黄色免费网站| 欧美日韩亚洲综合一区| 欧美日韩国产bt| 欧美精品xxxxbbbb| 日韩免费在线观看| 欧美韩日一区二区三区| 国产精品欧美极品| 亚洲激情成人在线| 婷婷丁香久久五月婷婷| 九色综合狠狠综合久久| 国产不卡在线播放| 日本乱人伦aⅴ精品| 欧美日韩视频在线观看一区二区三区| 欧美日韩一区久久| 精品国产乱码久久久久久蜜臀| 精品人伦一区二区色婷婷| 国产日韩高清在线| 亚洲精品国产一区二区精华液| 亚洲伊人色欲综合网| 久久99国内精品| 成人av小说网| 欧美久久婷婷综合色| 精品成人一区二区| 亚洲日本电影在线| 日本美女视频一区二区| 国产福利不卡视频| 欧美四级电影网| 国产蜜臀97一区二区三区| 亚洲综合免费观看高清在线观看| 视频一区二区中文字幕| 丁香婷婷综合网| 欧美放荡的少妇| 欧美激情在线观看视频免费| 一个色妞综合视频在线观看| 激情文学综合网| 色激情天天射综合网| 日韩三级电影网址| 中文字幕一区二区视频| 毛片av一区二区| 日本福利一区二区| 国产欧美精品在线观看| 三级精品在线观看| 色欧美88888久久久久久影院| 欧美一区二区三区免费观看视频| 国产精品久久免费看| 免费在线观看一区二区三区| 一本色道综合亚洲| 日本一区二区三区四区| 免费看欧美女人艹b| 在线观看不卡一区| 国产精品久久福利| 国产高清在线观看免费不卡| 欧美精品在线观看播放| 亚洲一区二区影院| 97超碰欧美中文字幕| 欧美国产日产图区| 激情久久久久久久久久久久久久久久| 欧美午夜精品久久久久久超碰| 国产欧美日韩久久| 国产成人夜色高潮福利影视| 欧美xxxxxxxxx| 视频一区二区中文字幕| 欧美色老头old∨ideo| 伊人性伊人情综合网| 色综合天天天天做夜夜夜夜做| 国产婷婷精品av在线| 经典三级一区二区| 精品蜜桃在线看| 黄色小说综合网站| 久久人人97超碰com| 日韩国产精品久久久| 日韩三级免费观看| 精品一区免费av| 国产亚洲一区字幕| 国产成人一级电影| 国产精品国产三级国产普通话三级| 岛国一区二区三区| 中文字幕亚洲一区二区av在线| www.日本不卡| 一区二区免费看| 欧美日韩国产免费一区二区| 五月婷婷激情综合| 日韩久久久久久| 国产精品一色哟哟哟| 中文字幕亚洲一区二区av在线 | 亚洲色图视频免费播放| 一本色道a无线码一区v| 亚洲线精品一区二区三区| 欧美精品一二三四| 麻豆极品一区二区三区| 久久久久久久综合色一本| 精品亚洲porn| 国产丝袜欧美中文另类| 成人福利视频在线看| 综合久久国产九一剧情麻豆| 91麻豆福利精品推荐| 亚洲国产综合在线| 一区二区在线看| www.欧美色图| 国产a精品视频| 久久―日本道色综合久久| 日韩不卡一二三区| 久久久亚洲国产美女国产盗摄 | 欧美日韩精品一区二区三区蜜桃| 亚洲va在线va天堂| 久久久欧美精品sm网站| 91一区二区三区在线播放| 欧美aⅴ一区二区三区视频| 久久久久国产一区二区三区四区| 国产麻豆欧美日韩一区| 亚洲综合色视频| 国产拍揄自揄精品视频麻豆| 日本国产一区二区| 国产精品1区二区.| 日日夜夜精品免费视频| 中文一区一区三区高中清不卡| 欧美日韩国产在线观看| 91美女在线看| 国产一区二区三区免费在线观看| 一区二区高清免费观看影视大全| 日韩女优av电影| 欧美高清精品3d| 色呦呦国产精品| 高清成人免费视频| 捆绑紧缚一区二区三区视频| 亚洲国产成人精品视频| 国产精品短视频| 久久精品视频一区二区| 日韩亚洲欧美成人一区| 欧美日韩卡一卡二| 色老汉av一区二区三区| 色综合一个色综合| 成人精品免费网站| 国产不卡在线一区| 国产不卡在线视频| 国产不卡在线播放| 成人午夜av影视| 国产黑丝在线一区二区三区| 国产乱码精品一区二区三区av| 欧美aaaaa成人免费观看视频| 午夜伊人狠狠久久| 亚洲电影激情视频网站| 一区二区三区影院| 一区二区三区精品久久久| 最新国产の精品合集bt伙计| 中文字幕的久久| 国产精品久久久久影视| 欧美国产精品一区| 国产精品视频你懂的| 中文字幕一区二区三区四区 | 欧美v亚洲v综合ⅴ国产v| 欧美日韩mp4| 在线成人免费观看| 日韩亚洲欧美综合| 久久亚洲综合色一区二区三区| 日韩视频一区二区| 久久亚洲精华国产精华液 | 国产精品嫩草久久久久| 国产午夜精品美女毛片视频| 久久午夜羞羞影院免费观看| 欧美激情一区在线| 亚洲一区二三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久精品国产一区二区三| 国产精品一区二区三区网站| 成人av动漫网站| 欧美日韩第一区日日骚| 337p粉嫩大胆色噜噜噜噜亚洲| 国产欧美一区二区三区在线看蜜臀| 中文字幕一区在线观看视频| 亚洲成人av一区二区三区| 麻豆国产精品官网| caoporen国产精品视频| 欧美日韩精品欧美日韩精品一 | 色综合久久久久综合99| 欧美视频在线一区二区三区| 精品国产一区二区精华| 中文字幕在线免费不卡| 天天色图综合网| 盗摄精品av一区二区三区| 日本韩国一区二区| 久久综合九色综合欧美亚洲| 精品国产第一区二区三区观看体验 | 精品一区精品二区高清| 国产九色精品成人porny| 欧美亚洲综合网| 精品少妇一区二区三区视频免付费 | 欧美一级专区免费大片| 久久你懂得1024| 日韩精品高清不卡| 国产精品一区三区|