




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
秘密 一、关于提高Oracle应用程序的编程效率31、SQL语句书写格式,使用共享SQL语句资源32、使用索引43、表连接44、嵌套循环65、大表扫描66 UPDATE时锁表。77、批次插入大量数据7二、SQL的使用81、 show和set命令是两条用于维护SQL*Plus系统变量的命令82、sqlplus程序的调试83、如何用SQL生成SQL批处理文件84、外部联接+的用法85、在编写PL/SQL代码中使用SELECT语句时如何避免例外发生 ?96、查找、删除表中重复的记录97、在Oracle中快速进行数据行存在性检查98、SQL语句中多表连接时,from 后面的表顺序109、用utl_file包中相关的文件操作函数进行文件的操作,在sqlplus中实现文件的上下载功能1010、having 子句的用法1011、游标和临时表10三、ORACLE索引的使用111、在建立索引时的注意事项:112、在使用索引时的注意事项:11四、DEVELOP2000/FORM的使用121、匿名登陆系统122、在客户端省略输入数据库串,只输入用户名、密码123、用FORM时使用参数列表进行参数传递124、使用显示项做到按钮的效果135、数组的使用136、FORM中,触发子exit_form的两种功能137、批次生成FMX文件148、屏蔽英文提示信息的两种方法149、截获系统信息,转换为汉字提示信息1410、 用FORMS实现ORACLE数据库与其它数据源数据的交换1511、当使用主从块时,如何使从块自动提交 ?1512、如何减少FORM所占磁盘空间 ?1613、ORACLE *Forms 中List Item 动态加载数据的方法1614、取随机数 between 0 and 11615、在form中执行ddl语句1716、在form中使用同步1718、用类似于其他语言中的struct结构来存储相关的数据信息,可提高程序的可读性和效率。17五、DEVELOP2000/REPORT的使用181、Oracle Report 3.0汉字输入问题的解决182、使用中间表来控制报表的输出格式183、报表输出到文本文件184、Oracle Report Wizard技巧185、如何使不同布局的报表显示在同一页上?18附摘文章20文章一 为什么有时ORACLE数据库不用索引来查找数据?20文章二 Oracle基于Client/Server的性能调整22一、关于提高Oracle应用程序的编程效率Oracle应用程序效率的提高可以从以下几个方面着手进行: 业务逻辑功能调整; 优化数据结构设计; 优化数据处理步骤; 优化SQL语句; 物理结构调整; 内存分配优化; I/O调整; 解决内存争用; 优化操作系统。这里主要就SQL语句的优化总结一些经验以供参考:1、SQL语句书写格式,使用共享SQL语句资源OPENPARSEBINDEXECUTEFETCHCLOSE在Oracle Server中, 执行的SQL语句以游标(cursor)的方式存在于共享SQL区(shared SQL aera)中,并按照下图所示流程处理:当执行一条SQL语句时,Oracle先在共享SQL区中查找是否有相同的SQL语句存在,如果不存在,Oracle将新建游标,并且对语句进行分析,然后绑定变量并按分析后的执行计划执行SQL语句;但如果有相同的SQL语句存在,Oracle可共享使用已有游标,仅需重新绑定变量(或者不需要),即可重复执行。因此,使用相同的SQL语句,可以节省系统内存空间,提高代码运行效率。Oracle按照以下原则判断SQL语句是否相同: 字母大小写相同; 空格数相同; 注释相同; 所使用的数据库对象(如:表等)相同; 变量类型相同。为实现游标共享,可使用存储过程、触发器、程序库等方式编写集中的代码。同时,按照固定的格式书写SQL语句也将提高游标共享的机率,从而提高代码效率。下例可作为SQL语句的书写格式以供参考:select b.polno, b.brno, b.start_date from evaluation a, decrease_sum b where b.start_date is not null and b.finish_date is null and ( c_type in ( select proc_type from evaluation_proc_type where evaluation_src = 2 ) or c_type in ( select proc_type from evaluation_proc_type where evaluation_src = 3 ) and a.ctrlno = b.ctrlno and c_type = c_typeand a.client_agree = Y );2、使用索引在对大量数据的表进行操作时,使用索引可以提高程序执行效率。建立索引时应注意: 将经常用来查询的字段放在复合索引的前面; 建立全表索引时,将限制性最强的字段放在最前面; 建立主键、唯一键约束时,系统自动建立索引; 建立外键约束时,系统不会自动建立索引,此时如果被引用的表经常修改,应在外键字段上建立索引,以防止锁表;例如:pol_info.applicant 引用client_info.insno作外键,如果pol_info.applicant上无索引,则修改client_info时会锁pol_info,如果在pol_info.applicant上加索引,即可防止上述锁出现,从而提高程序运行效率。 只加必要的索引,否则反而会影响效率; 例如:对存在大量重复值的字段加索引会使程序执行效率大幅降低。 尽量在where字句中直接使用有索引的字段;例如:where col1 = XXX及where col1 v_num均可利用索引,而where col1| = XXX或where col1-0 v_num则不可利用索引。 可强制SQL语句使用索引;例如:select /*+index(classes)*/ *from classeswhere type = IDL and loc_id between 3003 and 30005;3、表连接 使用非相等连接将降低执行效率; 多个表连接时,对于在select子句中不出现的表,可用子查询代替表连接; 在from子句中,将小表放在后面,可提高执行效率;例如:查询语句A执行效率将高于语句B:(A) select b.polno, b.brno, b.start_date from evaluation a, decrease_sum b where b.start_date is not null and b.finish_date is null and ( c_type in ( select proc_type from evaluation_proc_type where evaluation_src = 2 ) or c_type in ( select proc_type from evaluation_proc_type where evaluation_src = 3 ) and a.ctrlno = b.ctrlno and c_type = c_typeand a.client_agree = Y );(B) select b.polno, b.brno, b.start_date from decrease_sum b, evaluation a where b.start_date is not null and b.finish_date is null and ( c_type in ( select proc_type from evaluation_proc_type where evaluation_src = 2 ) or c_type in ( select proc_type from evaluation_proc_type where evaluation_src = 3 ) and a.ctrlno = b.ctrlno and c_type = c_typeand a.client_agree = Y ); 在where子句中将过滤记录数最多的条件放在最后; 子查询数量较大时,使用表连接代替低效的SQL语句(IN,EXISTS,NOT IN,NOT EXISTS等)。例如:有表一:create table tab1(col1 varchar2(20) primary key,col2 number);和表二:create table tab2(col1 varchar2(20) primary key,col2 number);A 现读取sum(tab1.col2),且tab1.col1存在于tab2.col1中:使用IN:select sum(col2) from tab1 where col1 in (select col1 from tab2);使用EXISTS:select sum(col2) from tab1 a where exists ( select * from tab2 where col1=a.col1);使用连接:select sum(a.col2) from tab1 a,tab2 b where a.col1=b.col2;B 现读取sum(tab1.col2),且tab1.col1不存在于tab2.col1中:使用NOT IN:select sum(col2) from tab1 where col1 not in (select col1 from tab2);使用NOT EXISTS:select sum(col2) from tab1 a where not exists ( select * from tab2 where col1=a.col1);使用外连接:select sum(a.col2) from tab1 a,tab2 b where a.col1=b.col2(+) and b.col1 is null;4、嵌套循环在PL/SQL过程中,如果有两个表查询结果的嵌套循环,应尽量将小表放在外层循环中。5、大表扫描如果需要对两张很大的表进行连接扫描,并且其中一表的连接字段为主键或唯一键,可用过程实现两表均一次扫描完成。(代码如下,用tab1.col1=tab2.col1连接,tab1.col1为主键)declare cursor cur_tab1 is select * from tab1 order by col1 asc; cursor cur_tab2 is select * from tab2 order by col1 asc; v_row1 tab1%rowtype; v_row2 tab2%rowtype;begin open cur_tab1; fetch cur_tab1 into v_row1; open cur_tab2; fetch cur_tab2 into v_row2; loop exit when not ( cur_tab1%found or cur_tab2%found ); if( v_row1.col1 = v_row2.col1 )then - 符合连接条件,进行处理 . . - 处理完毕 fetch cur_tab2 into v_row2; elsif( v_row1.col1 v_row2.col1 )then fetch cur_tab2 into v_row2; else fetch cur_tab1 into v_row1; end if; end loop; close cur_tab1; close cur_tab2;end;6 UPDATE时锁表。在PL/SQL中使用UPDATE语句时,请使用cursor防止表锁。(代码如下)declare cursor cur_tab1(cv_col1 tab1.col1%type)is select X from tab1 where col1 = cv_col1 for update col2; v_col1 tab1.col1%type; v_col2 tab1.col2%type; v_char char(1);begin . open cur_tab1(v_col1); loop fetch cur_tab1 into v_char; exit when cur_tab1%notfound; update tab1 set col2 = v_col2 where current of cur_tab1; end loop; close cur_tab1; .end;7、批次插入大量数据批次插入大量数据时,可以使用数据类型PL/SQL TABLE,将数据放在PL/SQL TABLE中,再一次提交插入目的表中。二、SQL的使用1、 show和set命令是两条用于维护SQL*Plus系统变量的命令show all -查看所有68个系统变量值show user -显示当前连接用户show error -显示错误set heading off -禁止输出列标题,默认值为ONset feedback off -禁止显示最后的计数信息,默认值为对6个或更多记录,回送ONset timing on -默认为OFF,可用来估计SQL语句的执行时间(单位是 1/1000*秒)set sqlprompt ”SQL” -设置默认提示符,默认值就是SQL set linesize 1000 -设置屏幕显示行宽,默认100set autocommit ON -设置是否自动提交,默认为OFFset pause on -默认为OFF,等待按下ENTER键,再显示下一页set arraysize 1 -默认为15set long 1000 -默认为802、sqlplus程序的调试在sqlplus程序的调试中,可以用dbms_output.put_line(aa)来输出调试信息,功能类似于form的message,不过在使用此功能的时候,要用set serveroutput on 将调试信息显示功能打开。3、如何用SQL生成SQL批处理文件查询当前用户下所有表的记录数select select |tname|,count(*) from |tname|; from tab where tabtype=TABLE;把所有符合条件的表的select权限授予为publicselect grant select on |table_name| to public; from user_tables where 条件;删除用户下各种对象select drop |tabtype| |tname from tab;删除符合条件用户select drop user |username| cascade; from all_users where user_id25;4、外部联接+的用法 外部联接+按其在=的左边或右边分左联接和右联接。若不带+运算符的表中的一个行不直接匹配于带+预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回,若二者均不带+,则二者中无法匹配的均被返回。利用外部联接+,可以替代效率十分低下的 not in 运算,大大提高运行速度。例如,下面这条命令执行起来很慢 :select empno from emp where empno not in (select empno from emp1 where job=SALE);倘若利用外部联接,改写命令如下: select a.empno from emp a ,emp1 b where a.empno=b.empno(+) and b.empno is null and b.job=SALE;可以发现,运行速度明显提高。5、在编写PL/SQL代码中使用SELECT语句时如何避免例外发生 ? 在使用SELECT语句为某变量赋值时, 往往会出现NO_DATA_FOUND 和TOO_MANY_ROWS 等异常情况,使用SELECT语句分两种情况:第一种情况,判断某表中是否有符合某一条件的记录, 这时使用聚组函数MAX就可以避免以上两个例外的发生。 其格式:SELECT MAX(列1),MAX(列2). . INTO 变 量1, 变 量2. . FROM基表WHERE条件, 当没有符合条件的数据时,该语句返回空, 即变量1,变量2. . 的值均为空, 而不会出现NO_DATA_FOUND 例外, 另外使用聚组函数MAX的同时也就避免了TOO_MANY_ROWS 例外。 第二种情况,SELECT语句中含聚组函数SUM, 这时如果使用了GROUP BY 和HAVING 子句, 当没有符合条件的记录时将发生NO_DATA_FOUND 例外,此时避免例外的办法是:去掉GROUP BY和HAVING子句, 将HAVING子句的条件加到WHERE子句中。 这样在使用SELECT语句时就不必再额外增加一段处理例外的代码, 从而简化的代码的编写。 6、查找、删除表中重复的记录每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在ORACLE中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除。查找重复记录select rowid,bm,mc from a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);删除重复记录delete from a a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);7、在Oracle中快速进行数据行存在性检查当在应用程序的中需要检查一个外键是否有相关的主键时,往往使用Select Count(*)类型的SQL语句。这是一个很显而易的方法,但却不是最快的方法。Count(*)函数调用可能会引起对整个表的进行扫描,这是一件很费时的操作。一个更好的方法是使用Oracle提供的称为ROWNUM的新特性,使用这个特性可以使数据库只检索一个启示就可以判断主键是否能与外键相配,这比Count(*)方法快得多,例如: SELECT Count(*) INTO :ll_Count - 应用Count(*) FROM ORDER WHERE PROD_ID = :ls_CheckProd USING SQLCA; IF ll_Count 0 THEN / Cannot delete product SELECT ORDER_ID INTO :ll_OrderID - 应用ROWNUM FROM ORDER WHERE PROD_ID = :ls_CheckProd AND ROWNUM 2 USING SQLCA; IF SQLCA.SQLNRows 0 THEN / cannot delete product 8、SQL语句中多表连接时,from 后面的表顺序小表做为驱动表,驱动表是from 语句的最后一个表9、用utl_file包中相关的文件操作函数进行文件的操作,在sqlplus中实现文件的上下载功能10、having 子句的用法 having 子句对 group by 子句所确定的行组进行控制,having 子句条件中只允许涉及常量、聚组函数或group by 子句中的列。11、游标和临时表游标提供了对特定集合中逐行扫描的手段,一般使用游标逐行遍历数据,根据取出的数据不同条件进行不同的操作。对多表和大表定义的游标循环很容易使程序进入一个漫长的等特甚至死机。有些场合,有时必须使用游标,此时也可考虑将符合条件的数据行转入临时表中,再对临时表定义游标进行操作,可是性能得到明显提高。三、ORACLE索引的使用1、在建立索引时的注意事项:A 数据重复性大的列上不要建立索引,如h_pol_info.ben_sts;B 需要经常性修改的列上不要建立索引;C 使用函数或运算(MIN,MAX除外)的列上不要建立索引;D 若一个表的外键的引用表上有频繁的插入、删除和修改操作,则要考虑建立索引,因为建立索引可以解除表锁。如业务表中的polno,clientno字段要考虑建立索引;E 建立索引时要考虑索引使查询性能提高与使用索引导致插入、删除和更新性能的降低做比较,还要考虑储存索引对数据库空间的需求增加的因素;2、在使用索引时的注意事项:A where子句中如下情形没有利用索引:(注意:=,=,= 使用了索引)对字段做函数和运算;对字段使用了 in, or, like 做条件;对字段使用了不等号 !=。B 写where条件时,有索引字段的判断在前,其它字段的判断在后。C 写where条件时用到多个索引字段,应按索引顺序判断。D select,update,delete 语句中的子查询应当有规律地查找少于20%的表行。如果一个语句查找的行数超过总行数的20%,它将不能通过使用索引获得性能上的提高。 E 索引可能产生碎片,因为记录从表中删除时,相应也从表的索引中删除。表释放的空间可以再用,而索引释放的空间却不能再用。频繁进行删除操作的被索引的表,应当阶段性地重建索引,以避免在索引中造成空间碎片,影响性能。在许可的条件下,也可以阶段性地truncate表,truncate命令删除表中所有记录,也删除索引碎片。 四、DEVELOP2000/FORM的使用1、匿名登陆系统 在使用DEVELOP2000时,采用on_logon触发子中使用connect()命令连接到数据库中,可以避免使用者看到连接数据库的用户名/口令2、在客户端省略输入数据库串,只输入用户名、密码客户端用“SQL Net Easy Configuration成功配置数据库别名(如server1)后,在客户端每次连接数据库时,都要键入数据库别名,给用户造成了一定的不便,我们可以通过以下方法来解决:选择“开始”按钮,启动“运行”图标,键入Regedit,进行注册表编辑定位到:HKEY_LOCAL_MACHINESOFTWAREORACLE注册表编辑器”选单上选取“编辑新建串值(S)项,将新建的串值名改为local,键值为server1注:server1即数据库串3、用FORM时使用参数列表进行参数传递 一般我们使用全局变量进行参数传递,这种参数传递方法的优点是传递的参数可以在所有被调用的FORM中使用,缺点是占用内存,当参数不需要在所有被调用的FORM中使用时,变量不能同名; 使用参数列表进行参数传递,优点是占用内存小,调用完后,自动从内存中删除,多个FORM调用时, 可使用相同的参数变量名,而不会冲突;缺点是传递的参数不能被所有调用的FORM中使用。主程序端: DECLARE pl_id ParamList; pl_name VARCHAR2(10) := TEMPDATA; BEGIN pl_id := Get_Parameter_List(pl_name); -获取参数列表 IF not Id_Null(pl_id) THEN -判断参数列表是否为空,不为空,则破坏掉 destroy_parameter_list(pl_id); END IF; pl_id := Create_Parameter_List(pl_name); -产生新的参数列表 IF Id_Null(pl_id) THEN Message(Error creating parameter list |pl_name); RAISE Form_Trigger_Failure; else Add_Parameter(pl_id,AAA,TEXT_PARAMETER,19); -增加参数 call_form(c:fmbtestpara_recieve,hide,no_replace,NO_QUERY_ONLY,pl_id); END IF; END; 在被调用程序端:在导航器的参数中增加变量,变量名及变量类型应与传递过来的参数列表中的参数名及参数类型相同,这样,直接使用:parameter.AAA就可以调用传递过来的参数了4、使用显示项做到按钮的效果 建立一个基于表的数据块,将要作成按钮的项作成显示项,再将另外一个项(任选同一个块中的项)变为TEXT_ITEM,宽度设为0,显示在屏幕上(只是为了获得输入焦点),在按钮项上定义“WHEN_MOUSE_ENTER” 触发子,当鼠标移动到当前项上时, 设置当前记录属性为特定的属性1, 还可以定义“WHEN_MOUSE_CLICK”触发子,当选中当前项时,设置当前记录属性为特定的属性2,并执行相应的过程。这样制作出来的显示项按钮不仅好看,而且具有动态效果;另外因为显示项的数据是从数据库中读出的,因此,可以直接在数据库端对按钮进行定义。5、数组的使用 由于频繁的对数据库中表进行读写操作会有较大资源开销,所以我们可以用数组将相关的数据暂时保存在内存当中,并在内存中进行操作,最后一次性写入数据库,以提高效率。 先定义一个记录,该纪录一般是和数据库的结构类似 ,比如 test_record; 然后定义一个数组,语句是: type test_table is table of test_record index by binary_integer; v_test_arr test_table; 对于数组有相关的函数可以调用,如Using EXISTS来判断某个记录是否存在,比如 if v_test_arr.exits(3),类似a3 Using COUNT判断数组的纪录数 比如 if v_test_arr.count=5 then.Using FIRST and LAST 将指针移到第一或者最后Using PRIOR and NEXT 将指针前移或者后移Using DELETE 删除数组对数组中的数据进行遍历处理的方法可以参照下面: if v_test_arr.count0 then i:=v_test_arr.first; loop . exit when i=v_test_arr.last; i:=v_test_arr.next(i); end loop; v_test_arr.delete; end if;6、FORM中,触发子exit_form的两种功能 退出FORM;exit_form; 取消查询 if :System.Mode = ENTER-QUERY then exit_form; end if;7、批次生成FMX文件用RUN命令,一次只能生成一个FMX文件,如果想生成一批FMX文件,这样做即麻烦又费时,一个生成FMX较快的办法是:先打开要运行的FMB文件,然后按住SHIFT键将这些文件全部选中后,再鼠标单击系统主菜单中文件菜单项的子菜单项ADMINISTRATION中GENERATE按钮即可8、屏蔽英文提示信息的两种方法 在应用程序中,系统提示信息为用户提供参考信息,帮助用户正确使用系统。但运行Oracle form时,屏幕下方信息行的提示信息却是英文。当有两个以上信息等待在信息行上显示时,这些英文信息还会以窗口方式出现在屏幕中央。如何避免这种情况? Oracle form将每个信息定义了重要级别,用于表明该信息是重要还是不重要。共有如下六个等级: 重要级别 意 义 0 所有信息5 重申明显的条件 10 操作人员产生了一个过程错误 15 操作人员试图执行form未设计的动作 20 由于触发子问题或某些其他突出问题不能继续动作 25 可能引起form不正确完成任务的一个条件 25 开发人员不能压缩的信息开发人员可压缩的最大信息级别为25,使用如下语句禁止系统信息显示:system.massege-level:=25; -禁止显示信息级别不大于25的系统信息:system.suppress-working:=TRUE; -禁止显示系统处理一个动作时的工作信息注意:这种方法只能屏蔽信息级别小于等于25的系统信息。此外,使用message语句的no_acknowledge参数,可避免使用复杂的message_level。message(msg,no_acknowledge);9、截获系统信息,转换为汉字提示信息 Oracle form中有两个触发子on-erro和on-message,分别在显示系统错误信息和通知信息(告诉操作人员当前处理状态或给出上下文相关的信息)时触发,在触发子中插入pl/sql代码实现汉字提示信息替换英文提示信息。例如:在on-erro触发子中插入以下编码: BeginIf erro-code=40202 and error-type=FRMThen message(字段值必须键入!); bell;End if;End;这样,当有form40202号错误时,系统信息行的提示信息会由原来的英文field must be enterd变为汉字字段值必须键入!,用户不用再为不认识的提示犯愁了。 10、 用FORMS实现ORACLE数据库与其它数据源数据的交换 Developer/2000不能实现同时多数据源的同时连接, 在多系统和异种数据源的操作中功能确实大打折扣, 虽然可以用3GL加ODBC作一DLL应用能实现,但一般的应用中又有点没用必要作的那么复杂。实际上Developer/2000内嵌包TEXT_IO为我们提供了一个更简单的方法。 几乎所有的数据库或数据库前端开发工 具都提供文本文件的操作, 这样我们完全可以用文本文件作为数据交换的通用格式。下例是在保险业中的一应 用:( 要 用 到d2kwfile.dll 应 用) DECLARE filename varchar2(128):=null; filenum text_io.file_type; linebuf varchar2(100); r_temp temp%rowtype;BEGIN filename:=d2k_file_dialog.show(请选择缴费工资台帐原文件,c:,源文件(*.txt)|*.txt|); if filename is null then raise form_trigger_failure; end if; filenum:=text_io.fopen(filename,r); loop BEGIN text_io.get_line(filenum,linebuf); TEXT_IO.PUT(linebuf);TEXT_IO.NEW_LINE; exception when no_data_found then exit; END; BEGIN v_temp.l1=substr(linebuf,1,9); v_temp.l2:= to_number(substr(linebuf,10,5); insert into temp(l1,l2) values (v_temp.l1,v_temp.l2); exception when others then END; end loop;END;11、当使用主从块时,如何使从块自动提交 ? 在FORM设计时有时需要用到主从块,在主从块录入时每当鼠标从从块移到主块准备录入一条新记录时,总是弹出一报警器,问你是否保存数据,从而影响录入速度,将该报警器去掉的方法是:在过程”CLEAR_ALL_MASTER_DETAILS 中的CLEAR_BLOCK(ASK_COMMIT)即清除从块时是否提交改为”CLEAR_BLOCK(DO_COMMIT),这样从块录完数据再导航到主块录入新记录时,系统将自动提交数据,而不再出现上述提示。 12、如何减少FORM所占磁盘空间 ? (1) 对于块中只用于查询并且无格式限制的项,设置为显示项。 (2) 保存FORM时先断开与数据库的链接,然后在保存。以上两种方法均可减小FORM的大小,尤其是第二种方法更为明显。当硬盘空间较小,或将程序备份到软盘上时,这样作是很有意义的。 13、ORACLE *Forms 中List Item 动态加载数据的方法A、打开Form Builder B、文件(F)新建(N)表格(F)C、新建一个非数据块,取名为tool D、鼠标右键布局编辑器(E)E、建一个列表项,名为xl(属于tool块) F、新建一过程,内写如下的代码PROCEDURE create_xl IS-动态显示学历过程CURSOR A IS SELECT DISTINCT(xl) FROM t_xl;-建立a游标,从学历表取数据(有可能动态变化)CNT NUMBER;-记录总数变量,用于生成列表的总项数i NUMBER;-循环变量TNAME t_%TYPE;-TNAME变量和t_xl表中name项具有相同的结构BEGINCLEAR_LIST(tool.xl); -清空列表tool.xl(tool块上的xl项)SELECT COUNT(DISTINCT(name) INTO CNT FROM t_xl;-计算列表总数OPEN A; -打开游标FOR i IN 1.CNT LOOP-开始循环FETCH A INTO TNAME; -取数EXIT WHEN A%NOTFOUND; -退出条件ADD_LIST_ELEMENT(tool.xl,i,TNAME,TNAME); -把查询出的值加入列表中END LOOP; -结束循环CLOSE A;-关闭游标END;14、取随机数 between 0 and 1function f_rand return number is a number := 25214903917; /* Fixed values used in generation */ c number := 11; m number := power(2,48);begin select to_char(sysdate,sssssdddhhsssss) from dual; v_rand := (a * v_lastval + c ) mod m ); v_rand := v_rand / m;end;15、在form中执行ddl语句forms_ddl(create table my_table (ship_id number); 16、在form中使用同步synchronize; - 可避免某些语句如MESSAGE语句未执行17、dp中调用dp自带的程序库执行外部命令,如: win_api_shell.winexec(v_run,0); win_api_utility.delete_file(v_filename); 注:自
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省大理州2024-2025学年七年级上学期期末考试历史试卷(含答案)
- 手抄报的设计课件
- 学生食品安全培训课件
- 橡胶厂成本核算管理办法
- 手外伤的康复课件
- 学生消防安全培训照片课件
- 培训课件战略(48-6)竞争战略
- 学生暑期安全知识培训内容课件
- 重庆南线种子公司招聘工作人员试题带答案分析2024年
- 学生宿舍安全培训报告课件
- 电梯运行日常检查记录表
- GB/T 34281-2017全民健身活动中心分类配置要求
- GB 14536.9-1996家用和类似用途电自动控制器电动水阀的特殊要求(包括机械要求)
- 《百团大战》历史课件
- 尿培养标本的留取规范及临床意义课件
- 名贵药材-三七课件
- 国学《弟子规》 课件
- 股骨干骨折的护理查房课件
- 六年级上册美术课件-5.蔬菜的联想 |苏少版 (共65张PPT)
- (完整)脑瘫儿童康复评估量表
- 2023新版南农《美学与大学生艺术素养》整理
评论
0/150
提交评论