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

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

?? generator_api.htm

?? Oracle PL/SQL procedure generator (second generator type)
?? HTM
?? 第 1 頁 / 共 5 頁
字號:
<P>
Suppose that you want to change the way that parameter names are formed from column information. The default for IN parameters is [colname}_in. Instead, you want to use a format like pr_[colname]. You want, in other words, a <I>prefix</I> and no suffix, where the prefix is "p" for parameter and "r" for read-only. You would then make these calls: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PLGdoir.setalias (PLGte.driver, PLGdoir.c_global, 'inpre', 'pr_');<BR>
PLGdoir.setalias (PLGte.driver, PLGdoir.c_global, 'insuf'); </DIR>
</DIR>

</FONT><P>In other words: you set the prefix and null out the suffix for the "in" wrapper. 
<P>We would suggest that for now you stick with the defaults. The tedemo.sql script does make a number of calls to PLGdoir.setalias, in case you want to explore these options. 
<P>One of the first places you may want to use aliases is to give meaningful names to database constraints. When you define a foreign key constraint, for example, if you do not give it a name, it will be assigned a SYS* name by Oracle. These names will result in code like this (from the employee encapsulation): <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PROCEDURE p_lookup_fkydescs (<BR>
--// Foreign key columns for SYS_C00709 --//<BR>
   pr_job_fk IN employee.job_fk%TYPE,<BR>
   pw_SYS_C00709 OUT te_JOB.I_JOB_FUNCTION_rt,<BR>
--// Foreign key columns for SYS_C00710 --//<BR>
   pr_manager_id IN employee.manager_id%TYPE,<BR>
   pw_SYS_C00710 OUT te_EMPLOYEE.I_EMPLOYEE_NAME_rt,<BR>
--// Foreign key columns for SYS_C00711 --//<BR>
   pr_department_id IN employee.department_id%TYPE,<BR>
   pw_SYS_C00711 OUT te_DEPARTMENT.I_DEPARTMENT_NAME_rt,<BR>
   record_error BOOLEAN := TRUE<BR>
); </DIR>
</DIR>

</FONT><P>Clearly, a less than ideal naming convention for arguments. I can replace those names with others as follows: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PLGdoir.setalias (PLGte.driver, 'employee', 'sys_c00709', 'function_lookup');<BR>
PLGdoir.setalias (PLGte.driver, 'employee', 'sys_c00710', 'manager_lookup');<BR>
PLGdoir.setalias (PLGte.driver, 'employee', 'sys_c00711', 'department_lookup'); </DIR>
</DIR>

</FONT><P>

<A NAME="Generatingfrom">Check the Coding Standards screen to view the current set of aliases which will apply to a generation session at that given level. 
<B><FONT  SIZE=4><P>Generating from Views</A> 
</B></FONT><P>In many organizations, developers write their applications against views instead of tables, usually for security purposes. PL/Generator allows you to generate a TE package for any view to which you have access. The issue is how much data dictionary information will be available to PL/Generator to affect the structure of the resulting code. If PLG only has the view name to work with, then it can only obtain the names of the columns for that view from ALL_TAB_COLUMNS.  
<P>
You have two basic options when generating from a view: 
<P>
1. To get a minimally useful encapsulation package, make sure you specify primary key column(s) for the view through calls to PLGdoir.setpkycol. PLG will not be able to generate program units based on foreign keys, unique indexes and constraints, but it will at least construct sensible parameter lists for the basic encapsulation cursors and programs. 
<P>
2. If the view is a "wrapper" for a table, you can define the underlying table to PLG and thereby generate a complete encapsulation package for the view. What is meant by a view as table "wrapper"?  <DIR>
<DIR>

<P>
a. The column list in the view is exactly the same (including same order) as that in the underlying table. 
<P>
b. The view is updateable (against a single table) according to the rules set out by Oracle. If your FROM clause contains just a single table, it is updateable (with various exceptions). If there are multiple tables, all the columns in the SELECT list should belong to the "main" table. </DIR>
</DIR>

<P>
You can associate an underlying table with a view by calling the PLGdoir.settabforview procedure. The header for this program is: <DIR>
<DIR>

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

</FONT><P>In the following example, I specify that for the purpose of encapsulation of the emps_in_ny view I want PL/Generator to use the employee table. <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PLGdoir.set_tabforview (PLGte.driver, 'emps_in_ny', 'employee'); <DIR>
<DIR>
<DIR>
<DIR>
<DIR>
<DIR>
<DIR>

<P>&nbsp; </DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</DIR>

</FONT>

<B><FONT  SIZE=4><P><A NAME="Miscellaneous">Miscellaneous Settings</A> </FONT><I>

<P><A NAME="CompanyName">Setting the Company Name</A> </B></I>
<P>
PL/Generator uses a driver file to place a standard header at the top of your generated code. You can modify this, but again, you will probably want to leave it intact if at all possible. It generates a standard copyright warning, including the company name. You can set your company name with the following program: <DIR>
<DIR>

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

</FONT><P>For example, the following command sets the company name for generation purposes to "ACME": <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PLGdoir.setcompany (PLGte.driver, PLGdoir.c_global, 'ACME');  </DIR>
</DIR>

</FONT><P>Here is an example of the generated header: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>CREATE OR REPLACE PACKAGE street_pkg<BR>
/*<BR>
|| PL/Vision Table Package Generator Facility:<BR>
|| Package Specification For "street"<BR>
||<BR>
|| (c) COPYRIGHT LightMyFile, Inc 1997. All rights reserved. No part of this<BR>
|| copyrighted work may be reproduced, modified, or distributed in any form or<BR>
|| by any means without the prior written permission of LightMyFile, Inc.<BR>
||<BR>
|| Stored In: street_pkg.sps<BR>
|| Created On: July 11, 1997 09:37:20<BR>
|| Created By: LMFADMIN<BR>
*/ <DIR>
<DIR>
<DIR>
<DIR>
<DIR>
<DIR>
<DIR>

<P>&nbsp; </DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</DIR>

</FONT>
<B><I><P><A NAME="Abbrv">Setting Object Abbreviation</P>
</B></I></FONT><P>You can now provide an abbreviation for your object (usually table or view) name. When PL/Generator constructs an identifier that is too long, it will replace any occurrence of the object name with its abbreviation. This will often resolve the invalid identifier situation.</P>
<P>To set an object abbreviation, call the PLGdoir.setobjabbrev procedure as defined below:</P>
<PRE>
PROCEDURE PLGdoir.setobjabbrev
   (drv IN VARCHAR2,
    tab IN VARCHAR2,
    abbrev IN VARCHAR2,
    sch IN VARCHAR2 := NULL);</PRE>
<FONT SIZE=2><P>So to specify "emp" as an abbreviation for the "employee" table in the Table Encapsulation driver, you would execute this command in SQL*Plus or some other PL/SQL environment:</P>
</FONT><PRE>
PLGdoir.setobjabbrev (
PLGte.driver,
'employee',
'emp',
USER);</PRE>
<FONT SIZE=2><P>You can also obtain the currently-defined abbreviation for a table by calling the following function:</P>
</FONT><PRE>
FUNCTION PLGdoir.objabbrev 
(drv IN VARCHAR2,
tab IN VARCHAR2,
sch IN VARCHAR2 := NULL)
RETURN VARCHAR2</PRE>

<P>
<FONT  SIZE=4><B><A NAME="GenerationSession">Registering the Generation Session</A></B></FONT> 
<P>
After PL/Generator generates its code, it registers that generation session in the OIR by call the PLGdoir.reggen procedure. This registration information will be used by PL/Generator to automate regeneration of code when the underlying database object changes (this will most likely happen through a procedure that is executed on a scheduled basis through DBMS_JOB). 
<P>
This registration information will be saved only if changes to the OIR are committed.  
<P>
You can have PL/Generator perform this commit automatically (immediately after the call to PLGdoir.reggen) by calling this program: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PROCEDURE PLGgen.autocommit;  </DIR>
</DIR>

</FONT><P>You can turn off the autocommit feature of PL/Generator (the default setting) by calling this program: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PROCEDURE PLGgen.noautocommit; </DIR>
</DIR>

</FONT><P>The following function, finally, indicates the status of auto-commit. <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>FUNCTION PLGgen.autocommitting RETURN BOOLEAN; </DIR>
</DIR>

</FONT><P>If autocommit is not enabled, then you will see this message after you finish generating code: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>PL/Generator Table Encapsulation Session<BR>
----------------------------------------<BR>
Generating encapsulator package for SCOTT.DEPARTMENT<BR>
Encapsulation of SCOTT.loc completed successfully (COMMIT to register). </DIR>
</DIR>

</FONT><P>If autocommit is enabled, you will see this message: <DIR>
<DIR>

<FONT FACE="Courier,Courier New" SIZE=1><P>SQL&gt; exec plggen.autocommit<BR>
SQL&gt; @te department<BR>
PL/Generator Table Encapsulation Session<BR>
----------------------------------------<BR>
Generating encapsulator package for SCOTT.DEPARTMENT<BR>
Encapsulation of SCOTT.loc completed successfully. <DIR>
<DIR>
<DIR>
<DIR>
<DIR>
<DIR>
<DIR>

<P>&nbsp; </DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</DIR>
</DIR>

</FONT>

<B><FONT  SIZE=4><P><A NAME="Clearing">Clear Object Information Repository Settings</A> </B></FONT>
<P>
Use the following API calls to remove entries you have made to the Object Information Repository. You will, in most cases, have the choice of clearing entries at the driver, schema or object (table/view) level. Each delete program accepts arguments for driver, object and schema. The following table shows what values to enter in order to clear entries at the appropriate level:

<TABLE BORDER="1">
<TR>
	<TD><B>Level</B></TD>
	<TD><B>Driver</B></TD>
	<TD><B>Table</B></TD>
	<TD><B>Schema</B></TD>
</TR>
<TR>
	<TD>Driver</TD>
	<TD>PLGte.driver or name of other driver</TD>
	<TD>PLGdoir.c_global</TD>
	<TD>PLGdoir.c_global</TD>
</TR>
<TR>
	<TD>Schema</TD>
	<TD>PLGte.driver or name of other driver</TD>
	<TD>PLGdoir.c_global</TD>
	<TD>Schema name</TD>
</TR>
<TR>
	<TD>Object</TD>
	<TD>PLGte.driver or name of other driver</TD>
	<TD>Object name</TD>
	<TD>Schema name</TD>
</TR>
</TABLE>

	
<P>
So, for example, to clear all entries for the error handling screen at the driver level, I would enter this command:

<PRE>
PLGdoir.delscreen (
   PLGte.driver, 
   PLGdoir.c_global, 
   PLGdoir.c_scr_errhdlg, 
   PLGdoir.c_global);
</PRE>
To clear all entries for the error handling screen at the schema level for SCOTT, I would enter this command:
<PRE>
PLGdoir.delscreen (
   PLGte.driver, 
   PLGdoir.c_global, 
   PLGdoir.c_scr_errhdlg, 
   'SCOTT');
</PRE>
To clear all entries for the error handling screen at the object level for table SCOTT.DEPARTMENT, I would enter this command:
<PRE>
PLGdoir.delscreen (
   PLGte.driver, 
   'department', 
   PLGdoir.c_scr_errhdlg, 
   'SCOTT');
</PRE>
<P>

<A NAME="ClearSchema"><I><B>Clear Schema</B></I></A>

<P>
Call the PLGdoir.del procedure to delete all OIR entries for a schema. The header for this program is:
<PRE>
   PROCEDURE PLGdoir.del
      (drv IN VARCHAR2,
       tab IN VARCHAR2 := NULL,
       sch IN VARCHAR2 := NULL);
</PRE>
You must specify the driver, '%' for tab ("all tables" since you are clearing all entries for a schema), and the name of your schema. 
<P>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产三级国产aⅴ入口| 日韩精品一二区| 亚洲小说春色综合另类电影| 男男gaygay亚洲| 99国产精品久久久久久久久久久| 欧美福利视频一区| 亚洲国产激情av| 免费成人在线观看视频| 在线免费观看日韩欧美| 久久理论电影网| 日韩av一级片| 欧美亚洲国产一区二区三区| 国产精品麻豆久久久| 青青草国产成人av片免费| 91蜜桃网址入口| 日本一区二区免费在线观看视频| 日韩成人午夜电影| 欧美三级资源在线| 亚洲精品国产一区二区精华液 | 91色|porny| 久久久不卡影院| 久久成人羞羞网站| 欧美日韩色综合| 亚洲免费av观看| 色婷婷精品久久二区二区蜜臀av | 成人免费视频免费观看| 欧美精品欧美精品系列| 亚洲欧洲成人自拍| 久久av中文字幕片| 在线免费观看日本欧美| 亚洲视频综合在线| 成人免费视频一区二区| 欧美日韩在线播放三区四区| 一区二区三区欧美在线观看| 不卡的电影网站| 精品国产自在久精品国产| 亚洲国产精品天堂| a4yy欧美一区二区三区| 国产欧美日韩视频在线观看| 蜜桃视频一区二区| 欧美这里有精品| 亚洲精品一二三区| 91视频一区二区| 成人欧美一区二区三区白人| 懂色av一区二区三区免费观看| 欧美一二三在线| 欧美a一区二区| 欧美一级生活片| 奇米色一区二区三区四区| 欧美一级片免费看| 日韩和欧美一区二区三区| 3d成人动漫网站| 日日夜夜一区二区| 91精品国产黑色紧身裤美女| 日韩精品一区第一页| 欧美精品一级二级| 日韩电影免费在线观看网站| 欧美一区二区三区人| 久久国产精品99久久人人澡| 91麻豆精品国产91久久久久久久久| 亚洲视频一区二区在线| 北条麻妃国产九九精品视频| 久久精品人人做人人爽人人| 亚州成人在线电影| 欧美在线播放高清精品| 亚洲欧美日韩一区| 91精品国产一区二区| 久久99日本精品| 久久午夜色播影院免费高清| 成人免费高清视频在线观看| 亚洲精品中文字幕乱码三区| 欧美日韩国产天堂| 美女尤物国产一区| 久久久精品天堂| 色综合久久久久| 日韩精品一二区| 国产色一区二区| 在线亚洲人成电影网站色www| 亚洲韩国精品一区| 日韩一区二区在线看| 成人动漫在线一区| 亚洲一区二区四区蜜桃| 欧美电影免费观看完整版| 国产乱码精品一品二品| 中文字幕一区二| 欧美一区二区国产| 国产黄色精品视频| 亚洲成人午夜影院| 久久精品亚洲乱码伦伦中文| 欧洲在线/亚洲| 国产在线一区二区综合免费视频| 亚洲美女屁股眼交| 欧美人体做爰大胆视频| 国产91在线看| 丝袜美腿成人在线| 国产精品不卡一区二区三区| 91精品国产综合久久久久久| 97精品国产露脸对白| 美腿丝袜一区二区三区| 亚洲欧美福利一区二区| 日韩精品一区二区在线| 91麻豆国产在线观看| 国产在线播放一区二区三区| 亚洲一区在线免费观看| 国产精品色呦呦| 26uuu国产在线精品一区二区| 欧美性高清videossexo| 国产一区二区三区不卡在线观看| 亚洲视频小说图片| 欧美xxxxx牲另类人与| 91国偷自产一区二区三区成为亚洲经典| 免费观看在线色综合| 一区二区在线观看视频在线观看| 久久久亚洲欧洲日产国码αv| 欧美喷水一区二区| 欧美性猛交xxxx乱大交退制版| 丁香另类激情小说| 久久69国产一区二区蜜臀| 日韩精品免费视频人成| 一区二区三区精品视频在线| 国产精品久久毛片| 国产亚洲欧美日韩俺去了| 精品国产免费人成在线观看| 欧美欧美欧美欧美| 色老头久久综合| 高清不卡一区二区在线| 日韩成人午夜精品| 免费av网站大全久久| 日本不卡在线视频| 午夜久久久影院| 亚洲一区二区三区四区的| 国产精品蜜臀在线观看| 亚洲日本va午夜在线电影| 中文字幕一区二区三区在线观看 | 国产精品一级黄| 国产一区二区美女| 国产在线国偷精品免费看| 青青草97国产精品免费观看 | 欧美日韩一级大片网址| 欧美性受xxxx| 欧美三级视频在线播放| 欧美日韩1区2区| 欧美日韩中文一区| 日本韩国欧美一区| 91丨九色丨黑人外教| 欧洲国内综合视频| 欧美高清视频一二三区| 欧美电影免费提供在线观看| 久久综合成人精品亚洲另类欧美 | 国产欧美精品国产国产专区| 久久免费看少妇高潮| 国产欧美日韩不卡免费| 亚洲色图20p| 亚洲午夜久久久久久久久久久| 免费久久精品视频| 高清在线观看日韩| 99riav一区二区三区| 欧美三级视频在线观看| 精品久久久久久最新网址| 中文字幕免费观看一区| 国产日产欧美精品一区二区三区| 色中色一区二区| 5858s免费视频成人| 欧美国产成人在线| 一区二区日韩电影| 五月婷婷另类国产| 国产伦理精品不卡| 欧美亚洲日本国产| 7777精品伊人久久久大香线蕉| 久久免费看少妇高潮| 亚洲精品成人在线| 免费精品视频在线| 国产xxx精品视频大全| 在线免费精品视频| 欧美一区二区三区视频在线| 国产精品卡一卡二卡三| 亚洲你懂的在线视频| 狠狠色丁香久久婷婷综合丁香| 91尤物视频在线观看| 精品免费视频.| 一区二区欧美视频| 国产精品69久久久久水密桃| 欧美日韩的一区二区| 日本一区二区三区视频视频| 天天影视色香欲综合网老头| 久久国产欧美日韩精品| 色综合天天综合在线视频| 精品国产一二三| 亚洲成人中文在线| 91免费视频网址| 日本一区二区三区四区在线视频| 一区二区三区国产豹纹内裤在线| 激情综合网最新| 欧美喷潮久久久xxxxx| 亚洲三级免费观看| 午夜成人在线视频| 色综合天天综合网天天看片| 久久人人超碰精品| 男男gaygay亚洲| 欧美美女一区二区|