




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录目录1一、创建表2创建表一2创建表二2创建表三3二、添加、修改、删除3添加3修改4删除4三、ORACLE 10g新增的数据类型4说明4示例4特殊值4四、ORACLE PL/SQL简介51 块结构52 变量和类型63 条件逻辑64 循环75 游标81声明一些变量,用于保存select语句的返回的列值82声明游标,并指定select语句83打开游标84从游标中获取记录95关闭游标96完整的示例97游标与for循环106 异常107 存储过程111创建过程112调用过程123获取过程信息124删除过程125查看过程中的错误136实际应用示例(积分清零)138 函数141创建函数142调用函数15
2、3获取函数信息154删除函数155实际应用示例(查找表)169 包191创建包和规范192创建包体193调用包中的过程和函数204获取有关包中的函数和过程的信息215删除包2110触发器211触发器运行的时机212设置示例触发器的准备工作223创建触发器224激活触发器235获取有关触发器的信息236禁用和启用触发器237删除触发器248实际应用示例(增加修改积分)24一、创建表创建表一CREATE TABLE TABLE_NAME (AAA INTEGER CONSTRAINT 约束名 PRIMARY KEY,BBB VARCHAR2(10) NOT NULL,DOB DATE,CCC VA
3、RCHAR2(14),);说明: CONSTRAINT子句用来限制存储在表或列中的值。对于AAA列,PRIMARY KEY关键字表明每行的AAA必须包含一个唯一的数字。约束可以使用可选名,他必须跟在CONSTRAINT之后。创建表二CREATE TABLE TABLE_NAME (AAA INTEGER CONSTRAINT 约束名1 PRIMARY KEY,BBB INTEGER CONSTRAINT 约束名2 REFERENCES TABLE_NAME1(表1中的主键DDD) VARCHAR2(10) NOT NULL,DOB DATE,CCC VARCHAR2(14),);说明:BBB是
4、对TABLE_NAME1表中DDD列的引用,称之为外键,因为他引用了其他表的列。包含这个外键的表(TABLE_NAME)称为子表,被引用的表(TABLE_NAME1)称为父表。当增加1个AAA时,会通过BBB列中提供1个DDD,为AAA关联DDD。这种关系称为父子关系。一般情况下,BBB与DDD具有相同的名称。创建表三CREATE TABLE TABLE_NAME (AAA INTEGER CONSTRAINT 约束名1 REFERENCES TABLE_NAME1(表1中的主键AAA),BBB INTEGER CONSTRAINT 约束名2 REFERENCES TABLE_NAME1(表1
5、中的主键BBB), VARCHAR2(10) NOT NULL,DOB DATE,CCC VARCHAR2(14),CONSTRAINT 约束名3 PRIMARY KEY(AAA,BBB),);说明:约束名3是个PRIMARY KEY。对于该表的每条记录来说,这两列值的组合必须唯一。二、添加、修改、删除添加INSERT INTO TABLE_NAME(AAA,BBB,CCC,DDD) VALUES(1,FIRED,06-JAN-1990,800-555-1215);INSERT INTO gajt_drv_check_34 (SFZMHM,DABH,XM,ZJCX,YZJCX,CCLZRQ,F
6、ZRQ,CCFZJG,FZJG,ZT,JBR)VALUES(,1,tom,C1E,EC, to_date(2002-10-18,yyyy-mm-dd),TO_DATE(2005-1-7 14:35:43,yyyy-mm-dd hh24-mi-ss),AA,AA,A,#);修改UPDATE TABLE_NAME SET AAA= XX X WHERE BBB=YYY;UPDATE TABLE_NAME SET AAA= XX1,BBB=ZZZ WHERE BBB=YY1;Update GZ_GongZB A Set A.FangZ = (Select B.FangZ From GZ_FeiYHZ
7、B B Where B.YueF = A.YueF And B.ZhiGZH = A.ZhiGZH), A.DianF = (Select B.DianF From GZ_FeiYHZB B Where B.YueF = A.YueF And B.ZhiGZH = A.ZhiGZH), A.ShuiF = (Select B.ShuiF From GZ_FeiYHZB B Where B.YueF = A.YueF And B.ZhiGZH = A.ZhiGZH), A.WeiSF = (Select B.WeiSF From GZ_FeiYHZB B Where B.YueF = A.Yue
8、F And B.ZhiGZH = A.ZhiGZH), A.NuanQF = (Select B.NuanQF From GZ_FeiYHZB B Where B.YueF = A.YueF And B.ZhiGZH = A.ZhiGZH), A.BiLDSF = (Select B.ShouSF From GZ_FeiYHZB B Where B.YueF = A.YueF And B.ZhiGZH = A.ZhiGZH), A.WuYF = (Select B.WuYF From GZ_FeiYHZB B Where B.YueF = A.YueF And B.ZhiGZH = A.Zhi
9、GZH) Where YueF = YF;删除DELETE FROM TABLE_NAME WHERE AAA=XX;三、ORACLE 10g新增的数据类型说明BINARY_FLOATBINARY_DOUBLENUMBER所需存储空间小5字节9字节22字节取整透明以二进制取整,number以十进制取整。运算封闭要么是数字要么是特殊值表示数字的范围更大比NUMBER能够表示更大/更小的数据执行运算的速度更快通过硬件进行计算,number得先通过软件转化再进行运算。如果涉及大量数字运算的系统,考虑是用该新数据类型。示例CREAT TABLE TABLE_NAME(BIN_FLOAT BINARY_
10、FLOAT,BIN_DOUBLE BINARY_DOUBLE,);INSERT INTO TABLE_NAME(BIN_FLOAT,BIN_DOUBLE) VALUES (39.5F,15.7D);特殊值特殊值描述BINARY_FLOAT_NAN非BINARY_FLOAT类型的数字BINARY_FLOAT_INFINITYBINARY_FLOAT类型的无穷大BINARY_DOUBLE_NAN非BINARY_DOUBLE类型的数字BINARY_DOUBLE_ INFINITYBINARY_DOUBLE类型的无穷大示例:INSERT INTO TABLE_NAME(BIN_FLOAT,BIN_DO
11、UBLE) VALUES (BINARY_FLOAT_INFINITY, BINARY_DOUBLE_ INFINITY);四、ORACLE PL/SQL简介是一种过程语言,添加一些基于SQL的编程结构。PL/SQL主要用来向数据库中添加过程和函数,以实现业务逻辑。他包含了一些标准的编程结构: 块结构 变量和类型 条件控制/条件逻辑 循环 游标,保存着查询返回的结果。 过程和函数定义 包,可以用来将过程和函数组合到一个单元中。这种集中化的代码可以由任何能够访问数据库的程序调用。1 块结构PL/SQL程序可划分成称为块的结构,每个快都包含有PL/SQL和SQL语句。典型的PL/SQL代码块结构包
12、含如下的结构:DECLARE DECLARE_STATEMENTSBEGIN EXECCUTEABLE_STATEMENTSEXCEPTION EXCEPTION_HANDLING_STATEMENTSEND;声明和异常块是可选的。 DECLARE_STATEMENTS包含在声明块中,它负责声明该块其他部分将会使用的变量。这些变量对于这个块来说是局部变量,也就是说不能从块的外部访问这些变量。声明总是放在块以开始的位置上。 EXECCUTEABLE_STATEMENTS是块中实际可执行的语句,其中可能包含执行诸如循环,条件逻辑等任务的语句。 EXCEPTION_HANDLING_STATEMEN
13、TS中的语句负责处理可执行语句中可能发生的任何错误。 每条语句都由“ ;”结尾,整个块由关键字END标志结束。 示例:已知矩形面积和高,计算其宽。DECLARE WIDTH INTEGER;HEIGHT INTEGER := 2; -初始化并被赋值AREA INTEGER;BEGIN AREA := 6;WIDTH := AREA/HEIGHT;DBMS_OUTPUT.PUT_LINE(WIDTH = |WIDTH); -输出到屏幕EXCEPTION WHEN ZERO_DIVIDE THENDBMS_OUTPUT.PUT_LINE(DIVISION BY ZERO ); -异常处理END;/
14、 -执行PL/SLQ语句注意: DBMS_OUTPUT.PUT_LINE必须在SQL/PLUS中输入SET SERVEROUTPUT ON才能看到输出的数据2 变量和类型PL/SQL数据类型与数据库列的类型很相似.格式(变量名 变量类型;).还可以通过(%TYPE)来定义变量的类型,这个关键字告诉PL/SQL使用与表中列相同的类型.格式(要声明的变量名 表名.该表中的列名%TYPE)3 条件逻辑在PL/SQL中,IF、THEN、ELSE、ELSEIF、ENDIF等关键字用于执行条件逻辑,下面的语法说明了条件逻辑的用法。IF 条件1 THEN PL/SQL语句1ELSEIF 条件2 THEN P
15、L/SQL语句2ELSE PL/SQL语句3END IF; 条件1、条件2是布尔表达式,其值为真或假。 PL/SQL语句1、PL/SQL语句2、PL/SQL语句3条件逻辑的流程如下: 如果条件1的值为真,则执行PL/SQL语句1。 如果条件1的值为假而条件2的值为真,则执行PL/SQL语句2。 如果条件1和条件2的值都为假,则执行PL/SQL语句3。 可以在一个IF语句中嵌套另外一个IF语句。示例:IF COUNT 0 THEN MESSAGE := COUNT IS POSITIVE;IF AREA 0 THEN MESSAGE := COUNT AND AREA ARE POSITIVE;
16、 END IFELSEIF COUNT = 0 THEN MESSAGE := COUNT IS ZERO ;ELSE MESSAGE := COUNT IS NEGATIVE ;END IF;4 循环简单循环(直到显示结束循环之前一直执行) 语法 LOOP PL/SQL语句 END LOOP; 示例COUNTER := 0;LOOP COUNTER := COUNTER+1; EXIT WHEN COUNTER = 5;END LOOP; 说明 要结束简单循环,可以使用EXIT或EXIT WHEN语句。EXIT立即结束循环,EXIT WHEN语句在指定条件出现时结束语句。EXIT WHEN可
17、以出现在循环代码中的任何位置。WHILE循环(直到某个特定条件出现之前一直运行)语法 WHILE 条件 LOOP PL/SQL语句 END LOOP;示例 COUNTER :=0;WHILE COUNTER 6 LOOP COUNTER := COUNTER+1; END LOOP; 说明 略FOR循环(运行预先预定的次数)语法 FOR LOOP_VARIABLE IN REVERSE LOWER_BOUND. UPPER_BOUND LOOPPL/SQL语句 END LOOP; 示例 FOR COUNT IN 1.5 LOOPDBMS_OUTPUT.PUT_LINE(COUNT); END
18、LOOP; /如果本例中使用了REVERSE,循环变量COUNT会从5开始,在每次循环中递减1,最终达到1。 说明 LOOP_VARIABLE:指定循环变量,可以将已经存在的变量用作循环变量,也可让循环语句自己创建循环变量(当所指定的变量部存在时,可能需要自己来创建)。循环变量的值在每一次循环中都增加(如果使用REVERSE关键字则减少)1。 REVERSE指定在每一次循环中循环变量都回递减。循环变量先被初始化为其上限,然后在每次循环中递减1,直至达到其下限。下限依然要在上限之前定义。 LOWER_BOUND指定循环的下限,在没有使用REVERSE的情况下,循环变量初始化为这个下限值。UPPE
19、R_BOUND指定循环的上限,如果是用了REVERSE,循环变量就初始化这个上限。5 游标当select语句从数据库中返回的记录多于一条时,就可以使用游标。游标可以理解为“可以一次访问一个的一组记录”。Select语句将列提取到游标中,然后根据游标取得记录。使用游标时需要遵循5个步骤:1声明一些变量,用于保存select语句的返回的列值 说明 用于保存列值得变量,必须与这些列值兼容。应尽可能使用%TYPE。示例 DECLARE V_AAA TABLE1.AAA%TYPE;V_BBB TABLE2.BBB%TYPE; 2声明游标,并指定select语句说明 游标的声明由游标名和希望执行的sele
20、ct语句组成,其中select语句在打开游标之前不会真正运行。游标的声明与其它的声明一样,都放在声明段中。声明游标的语法如下: CURSOR CURSOR_NAME IS SELECT_STATEMENT;示例 CURSOR CV_MMM IS SELECT AAA,BBB FROM TABLE WHERE CCC=XXX;3打开游标 说明 这一步将真正运行select语句,打开游标时使用的是OPEN语句,这个语句必须放在代码段的可执行段中。 示例 OPEN CV_MMM;4从游标中获取记录 说明 要从游标中取得每一条记录,可使用fetch语句。Fetch语句将列的值读取到指定的变量中。语法如
21、下: FETCH CURSOR_NAME INTO VARIABLE,VARIABLE1.; 示例FETCH CV_MMM INTO V_AAA,V_BBB;额外说明游标可能包含很多条记录,因此要通过循环一次读取每条记录,为确定循环是否结束,可以使用布尔变量进行控制(由表名%NOTFOUND),当语句到达游标最后一条记录时,这个变量为真。示例LOOPFETCH CV_MMM INTO V_AAA,V_BBB EXIT WHEN CV_MMM%NOTFOUND;DBMS_OUTPUT.PUT_LINE(V_AAA=|V_AAA|,V_BBB=|V_BBB);END LOOP;注意:此时输出的是读
22、到的V_AAA、V_BBB的值。5关闭游标 说明最后一步就是关闭游标,关闭由表是为了释放系统资源。语法如下;CLOSE CURSOR_NAME;6完整的示例 SET SERVEROUPT ON -SQL*PLUS中显示 DECLARE -声明变量V_AAA TABLE1.AAA%TYPE;V_BBB TABLE1.BBB%TYPE; CURSOR CV_MMM IS -定义游标SELECT AAA,BBB FROM TABLE1 ORDER BY AAA; BEGIN -开始 OPEN CV_MMM; -打开游标 LOOP -循环,从游标中获取记录FETCH CV_MMM INTO V_AAA
23、,V_BBB EXIT WHEN CV_MMM%NOTFOUND;DBMS_OUTPUT.PUT_LINE(V_AAA=|V_AAA|,V_BBB=|V_BBB); END LOOP; -循环结束COLSE CV_MMM; -关闭游标END; -结束/ -执行PL/SQL。运行校本:在SQL*PLUS通过命令执行脚本,命令格式:绝对目录文件名.SQL7游标与for循环 利用for循环,可以增强游标访问记录的能力。当访问for循环时可以不用显示的打开和关闭游标for循环会自动执行这些操作. 6的for循环如下:SET SERVEROUPT ON -SQL*PLUS中显示 DECLARE CURS
24、OR CV_MMM IS -定义游标SELECT AAA,BBB FROM TABLE1 ORDER BY AAA; BEGIN -开始 FOR -循环,从游标中获取记录V_AAA_BBB IN CV_MMM LOOPDBMS_OUTPUT.PUT_LINE(AAA=| V_AAA_BBB .AAA|,BBB=| V_AAA_BBB .BBB); END LOOP; -循环结束END; -结束/ -执行PL/SQL。8游标与for循环实例 create or replace procedure pro_que_ans(pro_id in number %type ) as begin if(p
25、ro_id!=null|pro_id.epuals()then delete from NETPRLCT_ANSWER_T where id=pro_id; then delete from NETPRLCT_QUESTION_T where id=(select questionid from NETPRLCT_ANSWER_T where id=pro_id) end if; commit; end if; EXCEPTION WHEN OTHERS THEN ROLLBACK;END pro_que_ans; CREATE OR REPLACE PROCEDURE PROCEDURE_N
26、AME (PARAMETER_NAME) IN|OUT|IN OUTTYPE,. IS|AS BEGIN PROCEDURE_BODY; END PROCEDURE_NAME; 6 异常异常用于处理PL/SQL块中出现的错误。OTHERS异常可以处理所有异常。因为TOHERS可处理所有异常,因此必须在EXCEPTION块中所有特定具体异常之后使用该异常。示例如下: BEGIN DBMS_OUTPUT.PUT_LINE(1/0); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(发生异常); END;/7 存储过程可以创建包含一组SQL和PL/SQ
27、L语句的过程。过程使得业务逻辑在数据库中集中,任何能够访问数据库的称许都可以使用过程。1创建过程 语法 CREATE OR REPLACE PROCEDURE PROCEDURE_NAME (PARAMETER_NAME) IN|OUT|IN OUTTYPE,. IS|AS BEGIN PROCEDURE_BODY; END PROCEDURE_NAME; 示例 CREATE OR REPLACE PROCEDURE UPDATE_PRODUCT_PRICE( P_PRODUCT_ID IN PRODUCTS.PRODUCT_ID%TYPE, -声明参数且值 P_FACTOR IN MUNBE
28、R -不可改变 )ASV_PRODUCT_COUNT INTEGER; BEGIN-通过PRODUCT_ID计算产品数量.如果产品存在则为1,如果不存在则为0.SELECT COUNT(*) INTO V_PRODUCT_COUNT FROM PRODUCTS WHERE PRODUCT_ID=P_PRODUCT_ID;-如果产品存在(V_PRODUCT_COUNT1),则更新产品价格。IF V_PRODUCT_COUNT=1 THEN UPDATE PRODUCTS SET PRICE = PRICE* P_FACTOR WHERE PRODUCT_ID= P_PRODUCT_ID; COM
29、MIT;END IF;EXCEPTION WHEN OTHERS THEN ROLLBACK;END UPDATE_PRODUCT_PRICE;/说明 OR REPLACE:说明如果该过程已经存在,则用心得过程替代它。该选项可以用来修改一个现有的过程。PROCEDURE_NAME是过程名。PARAMETER_NAME参数名,可以向一个过程传递多个参数。IN|OUT|IN OUT 定义参数的模式。IN是参数的默认模式,这种模式定义的参数在过程运行的时候已经具有值,在经过程序体时这个值不会改变。OUT模式定义的参数只在过程体内部赋值。IN OUT模式定义的参数当过程运行时可能已经有值,但是在过程体
30、内也可以修改。TYPE,指定参数的类型。PROCEDURE_BODY包含执行过程的SQL和PL/SQL语句。2调用过程 语法 通过CALL语句调用过程。CALL 过程名(参数1值,参数2值,.) 示例 CALL UPDATE_PRODUCT_PRICE(1,1.5); 说明 略3获取过程信息 语法 从USER_PROCEDURE试图中获得有关过程的详细信息。 示例 SELECT OBJECT_NAME,AGGREGATE,PARALLEL FROM USER_PROCEDURE WHERE OBJECT_NAME=过程名; 说明 从ALL_PROCEDURE中获得有关所有访问过程的信息。 4删
31、除过程 语法 DROP PROCEDURE 过程名; 示例 DROP PROCEDURE UPDATE_PRODUCT_PRICE; 说明 略。5查看过程中的错误 语法 SHOW ERRORS; 示例 略。 说明 略。6实际应用示例(积分清零)CREATE OR REPLACE PROCEDURE CLZQJF_P(clzdate in date,cl_count1 out number,cl_count2 out number,cl_count3 out number) as -取初领证日期为传入日期,初领证年份传入年份的驾驶证号 cursor c_jsy(rq char,nf char)
32、is select dabh from ggdx1.gajt_drivinglicense where cclzrq=rq and jzqxnf; t_jsy c_jsy%rowtype; -按驾驶证号取总积分 cursor c_wzjf(zh char) is select jf from wzjf_t where drino=zh; t_wzjf c_wzjf%rowtype; t_date char(8); t_nf ggdx1.gajt_drivinglicense.jzqx%type; t_rq ggdx1.gajt_drivinglicense.cclzrq%type; t_clz
33、date date;begin t_clzdate:=trunc(clzdate); t_date:=to_char(clzdate,yyyymmdd); t_rq:=substr(t_date,5,4); -按传入时间产生传入日期 t_nf:=substr(t_date,1,4); -按传入时间产生传入年份 cl_count1:=0; cl_count2:=0; cl_count3:=0; open c_jsy(t_rq,t_nf); -找出符合条件的驾驶员 loop fetch c_jsy into t_jsy; exit when c_jsy%notfound; cl_count1:=c
34、l_count1+1; open c_wzjf(t_jsy.dabh); fetch c_wzjf into t_wzjf; -找不到该驾驶员的违章记录 if c_wzjf%notfound then cl_count2:=cl_count2+1; insert into wzjf_t(drino,jf,lncf,jxxb,dysj,qlsj) values(t_jsy.dabh,0,0,0,null,t_clzdate); else if t_wzjf.jf12 then -该驾驶员的违章积分小于12分则清积分 cl_count3:=cl_count3+1; update wzjf_t se
35、t jf=0,dysj=null,qlsj=t_clzdate where drino=t_jsy.dabh; end if; end if; close c_wzjf; end loop; close c_jsy;end;8 函数函数与过程很相似,唯一的区别是函数必须向调用它的语句返回一个值。存储过程和函数有时合起来被称为存储子程序。1创建函数语法 CREAT OR REPLACE FUNCTION FUNCTION_NAME (PARAMETER_NAMEIN|OUT|IN OUT) TYPE,)RETURN TYPEIS|ASBEGIN FUNCTION_BODYEND FUNCTION
36、_NAME;说明OR REPALCE表示该函数已经存在,则替换现有的函数。可以用这个选项修改已有函数的定义。FUNCTION_BODY函数不像过程体,它必须有返回值,返回值是在RETURN子句中指定的一个PL/SQL类型的值。示例1(计算圆面积) CREATE OR REPLACE FUNCTION CIRCLE_AREA(P_RADIUS IN NUMBER)RETURN NUMBER ASV_PI NUMBER := 3.;V_AREA NUMBER; BEGINV_AREA :=V_PI*POWER(P_RADIUS,2);RETURN V_AREA; END CIRCLE_AREA;/
37、示例2(计算产品的平均价格) CREATE OR REPLACE FUNCTION AVERAGE_PRODUCT_PRICE(P_PRODUCKT_TYPE_ID IN INTEGER;) RETURN NUMBER AS V_AVERAGE_PRODUCT_PRICE NUMBER; BEGINSELECT AVG(PRICE) INTO V_AVERAGE_ PRODUCT_PRICEFROM PRODUCTS WHERE PRODUCKT_TYPE_ID = P_ PRODUCKT_TYPE_ID;RETURN V_AVERAGE_PRODUCT_PRICE; END AVERAGE_
38、PRODUCT_PRICE; /2调用函数语法 SELECT 函数名( 参数1值,参数2值,. ) FROM DUAL;说明可以像调用其它数据库内置函数一样调用自定义的函数。示例SELECT CIRCLE_AREA(2) FROM DUAL;SELECT AVERAGE_PRODUCT_PRICE(1) FROM DUAL;3获取函数信息语法 SELECT OBJECT_NAME, AGGREGATE, PARALEL FROM USER_PROCEGURES WHERE OBJECT_NAME IN (函数名1,函数名2,.)说明 略示例略4删除函数语法 DROP FUNCTION 函数名;
39、说明略示例略5实际应用示例(查找表)CREATE OR REPLACE FUNCTION FIND_TABLE (wf_name char,wf_data char,wf_file_type char,wf_file char) RETURN varchar2 as ls_gwsj varchar2(16); temp varchar2(10); ls_file varchar2(10); li_data_start number; li_start number; li_name_length number; ls_type varchar2(10); ls_replace varchar2
40、(10); li_length number; ls_data varchar2(200); ls_position varchar2(1); k number; wf_data1 varchar2(200); begin SELECT A.F_FILE, A.F_DATA_START, B.F_START_POS, B.F_LENGTH, B.F_NAME_TYPE, B.F_replace_dir, B.F_REPLACE, B.F_LENGTH INTO ls_file,li_data_start,li_start,li_name_length,ls_type,ls_position,l
41、s_replace,li_length FROM TABLE_COMMAND A, TABLE_POSITION B WHERE B.F_NAME=wf_name AND A.F_card_TYPE=wf_file_type AND A.F_FILE=wf_file AND A.F_czLX=r AND ( A.F_FILE = B.F_FILE ) and ( A.F_card_TYPE = B.F_FILE_TYPE )ORDER BY A.F_card_TYPE ASC, A.F_FILE ASC, A.F_czLX ASC ; -把有效数据截取出来wf_data1:= substrb(
42、wf_data,li_data_start+1);-根据不同的数据类型做相应的处理if ls_type=string or ls_type=ascii thenls_data := substrb(wf_data1,li_start,li_name_length); end if;if ls_type =date thenif wf_name=nsrq thenls_data := substrb(wf_data1,li_start,6);if ls_data= thenls_data := 1900-01-01;end if;elsels_data := substrb(wf_data1,l
43、i_start,4)|-|substrb(wf_data1,li_start+4,2)|-|substrb(wf_data1,li_start+6,2);if ls_data=0000-00-00 thenls_data := 1900-01-01;end if;end if; end if;if ls_type=integer thenls_data := substrb(wf_data1,li_start,li_name_length); end if;if ls_type=datetime then temp:=substrb(wf_data1,li_start,4); if subst
44、rb(wf_data1,li_start,4)=0000 then temp:=1900; end if; ls_gwsj:=temp|-; temp:=substrb(wf_data1,li_start+4,2); if substrb(wf_data1,li_start+4,2)=00 then temp:=01; end if; ls_gwsj:=ls_gwsj|temp|-; temp:=substrb(wf_data1,li_start+6,2); if substrb(wf_data1,li_start+6,2)=00 then temp:=01; end if; ls_gwsj:
45、=ls_gwsj|temp| |substrb(wf_data1,li_start+8,2)|:|substrb(wf_data1,li_start+10,2); ls_data:=trim(ls_gwsj); if ls_data=-: then ls_data:=; end if;end if;if ls_replace is not null or ls_replace then-处理驾驶员卡中违章信息记录的驾驶员信息 if wf_file_type=1 and wf_name=jybh and wf_file=6005 thenif substr(ls_data,1,2)=11 the
46、nreturn X|substrb(ls_data,2);end if;end if;if ls_type=string or ls_type=ascii or ls_type =ASCII thenif upper(ls_position)=F thenk := instr(ls_data,ls_replace,1); while k=1 and (length(ls_data)li_length or li_length=0)loopls_data := substrb(ls_data,2);k := instr(ls_data,ls_replace,1); end loop; end i
47、f;if upper(ls_position)=B thenk := instr(ls_data,ls_replace,length(ls_data) - 1);while k0 and (length(ls_data)li_length or li_length=0)loopls_data := substrb(ls_data,1,length(ls_data) - 1);k := instr(ls_data,ls_replace,length(ls_data) - 1);end loop; end if; end if;end if;-返回数据return ls_data;end ;9 包把过程和函数组织到包中,包可以将
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年风景名胜区草坪修复与生态保护合同
- 2025版高科技园区场地租赁合同转让及创新项目引进协议
- 二零二五年度高空作业pc吊装劳务分包服务协议
- 二零二五年度智能安保服务合同规范文本
- 2025版产业园科技创新项目合作协议
- 二零二五年KTV周边产品开发与销售协议
- 2025版餐厅总经理职位竞聘与管理合同
- 2025版办公家具租赁与维保服务合同贴心
- 2025版人工智能技术研发与应用合同范本
- 二零二五年度重工业设备搬迁与运输安全协议范本
- 吊装起重作业安全培训课件
- YY/T 1533-2017全自动时间分辨荧光免疫分析仪
- JJF 1105-2018触针式表面粗糙度测量仪校准规范
- GB/T 4854.3-2022声学校准测听设备的基准零级第3部分:骨振器纯音基准等效阈振动力级
- GB/T 29602-2013固体饮料
- GB/T 24015-2003环境管理现场和组织的环境评价(EASO)
- GB/T 14486-2008塑料模塑件尺寸公差
- 特种设备管理台帐(5个台账)
- 广东省推进粤港澳大湾区国际科技创新中心建设重点任务实施方案
- 牛津版沪教版英语八年级(上)Unit-1-Encyclopaedias-词句讲解+练习+答案
- 小学升初中入学测试宁外入学试卷
评论
0/150
提交评论