Software Explorer

我不去想是否能够成功,既然选择了远方,便只顾风雨兼程;我不去想,身后会不会袭来寒风冷雨,既然目标是地平线,留给世界的只能是背影.

转载 PL/SQL程序设计 收藏

第一章 PL/SQL 程序设计简介 PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点。本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的主要特点,以及了解PL/SQL语言的重要性和数据库版本问题。还要介绍一些贯穿全书的更详细的高级概念,并在本章的最后就我们在本书案例中使用的数据库表的若干约定做一说明。本章主要重点:􀁺 PL/SQL概述􀁺 PL/SQL块结构􀁺 PL/SQL流程􀁺 运算符和表达式􀁺 游标􀁺 异常处理􀁺 数据库存储过程和函数􀁺 包􀁺 触发器 §1.2 SQL与PL/SQL §1.2.1 什么是PL/SQL? PL/SQL是 Procedure Language & Structured Query Language 的缩写。ORACLE的SQL是支持ANSI(American national Standards Institute)和ISO92 (International Standards Organization)标准的产品。PL/SQL是对SQL语言存储过程语言的扩展。从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL。它现在已经成为一种过程处理语言,简称PL/SQL。目前的PL/SQL包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎。可以将这两部分称为:数据库PL/SQL和工具PL/SQL。两者的编程非常相似。都具有编程结构、语法和逻辑机制。工具PL/SQL另外还增加了用于支持工具(如ORACLE Forms)的句法,如:在窗体上设置按钮等。本章主要介绍数据库PL/SQL内容。 §1.2.1 PL/SQL的好处 §1.2.1.1 有利于客户/服务器环境应用的运行对于客户/服务器环境来说,真正的瓶颈是网络上。无论网络多快,只要客户端与服务器进行大量的数据交换。应用运行的效率自然就回受到影响。如果使用PL/SQL进行编程,将这种具有大量数据处理的应用放在服务器端来执行。自然就省去了数据在网上的传输时间。 - 4 - 5 §1.2.1.2 适合于客户环境 PL/SQL由于分为数据库PL/SQL部分和工具PL/SQL。对于客户端来说,PL/SQL可以嵌套到相应的工具中,客户端程序可以执行本地包含PL/SQL部分,也可以向服务发SQL命令或激活服务器端的PL/SQL程序运行。 §1.2.2 PL/SQL 可用的SQL语句 PL/SQL是ORACLE系统的核心语言,现在ORACLE的许多部件都是由PL/SQL写成。在PL/SQL中可以使用的SQL语句有: INSERT,UPDATE,DELETE,SELECT INTO,COMMIT,ROLLBACK,SAVEPOINT。提示:在 PL/SQL中只能用 SQL语句中的 DML 部分,不能用 DDL 部分,如果要在PL/SQL中使用DDL(如CREATE table 等)的话,只能以动态的方式来使用。􀁺 ORACLE 的 PL/SQL 组件在对 PL/SQL 程序进行解释时,同时对在其所使用的表名、列名及数据类型进行检查。􀁺 PL/SQL 可以在SQL*PLUS 中使用。􀁺 PL/SQL 可以在高级语言中使用。􀁺 PL/SQL可以 在ORACLE的 开发工具中使用。􀁺 其它开发工具也可以调用PL/SQL编写的过程和函数,如Power Builder 等都可以调用服务器端的PL/SQL过程。 §1.3 运行PL/SQL程序 PL/SQL程序的运行是通过ORACLE中的一个引擎来进行的。这个引擎可能在ORACLE的服务器端,也可能在 ORACLE 应用开发的客户端。引擎执行PL/SQL中的过程性语句,然后将SQL语句发送给数据库服务器来执行。再将结果返回给执行端。 - 5 - 6 第二章 PL/SQL块结构和组成元素 §2.1 PL/SQL块 PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分。 PL/SQL块的结构如下: DECLARE /* 声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数 */ BEGIN /* 执行部分: 过程及SQL 语句 , 即程序的主要部分 */ EXCEPTION /* 执行异常部分: 错误处理 */ END; 其中 执行部分是必须的。 PL/SQL块可以分为三类: 1. 无名块:动态构造,只能执行一次。 2. 子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用它们。 3. 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。 §2.2 PL/SQL结构􀁺 PL/SQL块中可以包含子块;􀁺 子块可以位于 PL/SQL中的任何部分;􀁺 子块也即PL/SQL中的一条命令; §2.3 标识符 PL/SQL程序设计中的标识符定义与SQL 的标识符定义的要求相同。要求和限制有:􀁺 标识符名不能超过30字符;􀁺 第一个字符必须为字母;􀁺 不分大小写;􀁺 不能用’-‘(减号); 􀁺 不能是SQL保留字。提示: 一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果. - 6 - 7 例如:下面的例子将会删除所有的纪录,而不是KING 的记录; DECLARE Ename varchar2(20) :=’KING’; BEGIN DELETE FROM emp WHERE ename=ename; END; 变量命名在PL/SQL中有特别的讲究,建议在系统的设计阶段就要求所有编程人员共同遵守一定的要求,使得整个系统的文档在规范上达到要求。下面是建议的命名方法: §2.4 PL/SQL 变量类型在前面的介绍中,有系统的数据类型,也可以自定义数据类型。下表是ORACLE类型和PL/SQL中的变量类型的合法使用列表: §2.4.1 变量类型在ORACLE8i中可以使用的变量类型有: 例1. 插入一条记录并显示; DECLARE Row_id UROWID; info VARCHAR2(40); BEGIN INSERT INTO dept VALUES (90, ‘SERVICE’, ‘BEIJING’) RETURNING rowid, dname||’:’||to_char(deptno)||’:’||loc INTO row_id, info; DBMS_OUTPUT.PUT_LINE(‘ROWID:’||row_id); DBMS_OUTPUT.PUT_LINE(info); END; 其中:RETURNING子句用于检索INSERT语句中所影响的数据行数,当INSERT语句使用VALUES 子句插入数据时,RETURNING 字句还可将列表达式、ROWID和REF值返回到输出变量中。在使用RETURNING 子句是应注意以下几点限制: 1. 不能并行DML语句和远程对象一起使用; 2. 不能检索LONG 类型信息; 3. 当通过视图向基表中插入数据时,只能与单基表视图一起使用。例2. 修改一条记录并显示 DECLARE Row_id UROWID; info VARCHAR2(40); BEGIN UPDATE dept SET deptno=80 WHERE DNAME=‘SERVICE’ RETURNING rowid, dname||’:’||to_char(deptno)||’:’||loc INTO row_id, info; DBMS_OUTPUT.PUT_LINE(‘ROWID:’||row_id); DBMS_OUTPUT.PUT_LINE(info); END; 其中:RETURNING子句用于检索被修改行信息:当UPDATE语句修改单行数据时,RETURNING 子句可以检索被修改行的ROWID和REF值,以及行中被修改列的列表达式, - 8 - 9 并可将他们存储到PL/SQL变量或复合变量中;当UPDATE语句修改多行数据时,RETURNING 子句可以将被修改行的ROWID和REF值,以及列表达式值返回到复合变量数组中。在UPDATE中使用RETURNING 子句的限制与INSERT语句中对RETURNING子句的限制相同。例3. 删除一条记录并显示 DECLARE Row_id UROWID; info VARCHAR2(40); BEGIN DELETE dept WHERE DNAME=‘SERVICE’ RETURNING rowid, dname||’:’||to_char(deptno)||’:’||loc INTO row_id, info; DBMS_OUTPUT.PUT_LINE(‘ROWID:’||row_id); DBMS_OUTPUT.PUT_LINE(info); END; 其中:RETURNING子句用于检索被修改行信息:当UPDATE语句修改单行数据时,RETURNING 子句可以检索被修改行的ROWID和REF值,以及行中被修改列的列表达式,并可将他们存储到PL/SQL变量或复合变量中;当UPDATE语句修改多行数据时,RETURNING 子句可以将被修改行的ROWID和REF值,以及列表达式值返回到复合变量数组中。在UPDATE中使用RETURNING 子句的限制与INSERT语句中对RETURNING子句的限制相同。 §2.4.2 复合类型 ORACLE 在 PL/SQL 中除了提供象前面介绍的各种类型外,还提供一种称为复合类型的类型---记录和表. §2.4.2.1 记录类型记录类型是把逻辑相关的数据作为一个单元存储起来,它必须包括至少一个标量型或RECORD 数据类型的成员,称作PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但逻辑相关的信息。定义记录类型语法如下: TYPE record_type IS RECORD( Field1 type1 [NOT NULL] [:= exp1 ], Field2 type2 [NOT NULL] [:= exp2 ], . . . . . . Fieldn typen [NOT NULL] [:= expn ] ) ; 例4 : - 9 - 10 DECLARE TYPE test_rec IS RECORD( Code VARCHAR2(10), Name VARCHAR2(30) NOT NULL :=’a book’); V_book test_rec; BEGIN V_book.code :=’123’; V_book.name :=’C++ Programming’; DBMS_OUTPUT.PUT_LINE(v_book.code||v_book.name); END; 可以用 SELECT语句对记录变量进行赋值,只要保证记录字段与查询结果列表中的字段相配即可。 §2.4.2.2 使用%TYPE 定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE。使用%TYPE特性的优点在于:􀁺 所引用的数据库列的数据类型可以不必知道;􀁺 所引用的数据库列的数据类型可以实时改变。例5: DECLARE -- 用 %TYPE 类型定义与表相配的字段 TYPE t_Record IS RECORD( T_no emp.empno%TYPE, T_name emp.ename%TYPE, T_sal emp.sal%TYPE ); -- 声明接收数据的变量 v_emp t_Record; BEGIN SELECT empno, ename, sal INTO v_emp FROM emp WHERE empno=7788; DBMS_OUTPUT.PUT_LINE (TO_CHAR(v_emp.t_no)||v_emp.t_name||TO_CHAR(v_emp.t_sal)); END; 例6: DECLARE v_empno emp.empno%TYPE :=&empno; Type r_record is record ( v_name emp.ename%TYPE, v_sal emp.sal%TYPE, v_date emp.hiredate%TYPE); Rec r_record; - 10 - 11 BEGIN SELECT ename, sal, hiredate INTO Rec FROM emp WHERE empno=v_empno; DBMS_OUTPUT.PUT_LINE(Rec.v_name||'---'||Rec.v_sal||'--'||Rec.v_date); END; §2.4.3 使用%ROWTYPE PL/SQL 提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致。使用%ROWTYPE特性的优点在于:􀁺 所引用的数据库中列的个数和数据类型可以不必知道;􀁺 所引用的数据库中列的个数和数据类型可以实时改变。例7: DECLARE v_empno emp.empno%TYPE :=&empno; rec emp%ROWTYPE; BEGIN SELECT * INTO rec FROM emp WHERE empno=v_empno; DBMS_OUTPUT.PUT_LINE('姓名:'||rec.ename||'工资:'||rec.sal||'工作时间:'||rec.hiredate); END; §2.4.4 LOB类型* ORACLE提供了LOB (Large OBject)类型,用于存储大的数据对象的类型。ORACLE目前主要支持BFILE, BLOB, CLOB 及 NCLOB 类型。 BFILE (Movie) 存放大的二进制数据对象,这些数据文件不放在数据库里,而是放在操作系统的某个目录里,数据库的表里只存放文件的目录。 BLOB(Photo) 存储大的二进制数据类型。变量存储大的二进制对象的位置。大二进制对象的大小<=4GB。 CLOB(Book) 存储大的字符数据类型。每个变量存储大字符对象的位置,该位置指到大字符数据块。大字符对象的大小<=4GB。 NCLOB 存储大的NCHAR字符数据类型。每个变量存储大字符对象的位置,该位置指到大字符数据块。大字符对象的大小<=4GB。 §2.4.5 Bind 变量绑定变量是在主机环境中定义的变量。在PL/SQL 程序中可以使用绑定变量作为他们将要使用的其它变量。为了在PL/SQL 环境中声明绑定变量,使用命令VARIABLE。例如: - 11 - 12 VARIABLE return_code NUMBER VARIABLE return_msg VARCHAR2(20) 可以通过SQL*Plus命令中的PRINT 显示绑定变量的值。例如: PRINT return_code PRINT return_msg 例7: VARIABLE result NUMBER BEGIN SELECT (sal*12)+nvl(comm, 0) INTO :result FROM emp WHERE empno=7788; END; PRINT result §2.4.6 INDEX BY TABLES 包括两个基本成分: .数据处理类型为BINARY_INTEGER主键; .标量或记录数据类型的列. TYPE type_name IS TABLE OF {column_type | variable%TYPE | table.column%TYPE } [NOT NULL] | table%ROWTYPE [ INDEX BY BINARY_INTEGER]; 方法描述 EXISTS(n) Return TRUE if the nth element in a PL/SQL table exists; COUNT Returns the number of elements that a PL/SQL table currently contains; FIRST LAST Return the first and last (smallest and lastest) index numbers in aPL/SQL table. Returns NULL if the PL/SQL table is empty. PRIOR(n) Returns the index number that precedes index n in a PL/SQL table; NEXT(N) Returns the index number that succeeds index n in a PL/SQL table; TRIM TRIM removes one element from the end of a PL/SQL table. TRIM(n) removes n element from the end of a PL/SQL table. DELETE DELETE removes all elements from a PL/SQL table. DELETE(n) removes the nth elements from a PL/SQL table. DELETE(m, n) removes all elements in the range m to n from a PL/SQLtable. 例8: DECLARE TYPE dept_table_type IS TABLE OF dept%ROWTYPE INDEX BY BINARY_INTEGER; my_dname_table dept_table_type; - 12 - 13 v_count number(2) :=4; BEGIN FOR int IN 1 .. v_count LOOP SELECT * INTO my_dname_table(int) FROM dept WHERE deptno=int*10; END LOOP; FOR int IN my_dname_table.FIRST .. my_dname_table.LAST LOOP DBMS_OUTPUT.PUT_LINE(‘Department number: ‘||my_dname_table(int).deptno); DBMS_OUTPUT.PUT_LINE(‘Department name: ‘|| my_dname_table(int).dname); END LOOP; END; §2.4.7 数据类型的转换* 隐式类型转换 BIN_INT CHAR DATE LONG NUMBER PLS_INT UROWID VARCHAR2 BIN_INT     CHAR   DATE       LONG        NUMBER     RAW       UROWID        VARCHAR2   §2.5 运算符和表达式(数据定义) §2.5.1 关系运算符运算符意义 = 等于 <> , != , ~= , ^= 不等于 < 小于 > 大于 <= 小于或等于 >= 大于或等于 §2.5.2 一般运算符运算符意义 + 加号 - 减号 * 乘号 / 除号 := 赋值号 => 关系号 - 13 - 14 .. 范围运算符 || 字符连接符 §2.5.3 逻辑运算符运算符意义 IS NULL 是空值 BETWEEN 介于两者之间 IN 在一列值中间 AND 逻辑与 OR 逻辑或 NOT 取返,如IS NOT NULL, NOT IN §2.6 变量赋值在PL/SQL编程中,变量赋值是一个值得注意的地方,它的语法如下: variable := expression ; variable 是一个PL/SQL变量, expression 是一个PL/SQL 表达式. §2.6.1 字符及数字运算特点空值加数字仍是空值:NULL + < 数字> = NULL 空值加(连接)字符,结果为字符:NULL || <字符串> = < 字符串> §2.6.2 BOOLEAN 赋值布尔值只有TRUE, FALSE及 NULL 三个值。如: DECLARE done BOOLEAN; /* the following statements are legal: */ BEGIN done := FALSE; WHILE NOT done LOOP Null; END LOOP; END; §2.6.3 数据库赋值数据库赋值是通过 SELECT语句来完成的,每次执行 SELECT语句就赋值一次,一般要求被赋值的变量与SELECT中的列名要一一对应。如:例9: - 14 - 15 DECLARE emp_id emp.empno%TYPE :=7788; emp_name emp.ename%TYPE; wages emp.sal%TYPE; BEGIN SELECT ename, NVL(sal,0) + NVL(comm,0) INTO emp_name, wages FROM emp WHERE empno = emp_id; Dbms_output.put_line(emp_name||’----‘||to_char(wages)); END; 提示:不能将SELECT语句中的列赋值给布尔变量。 §2.6.4 可转换的类型赋值􀁺 CHAR 转换为 NUMBER:使用 TO_NUMBER 函数来完成字符到数字的转换,如: v_total := TO_NUMBER(‘100.0’) + sal; 􀁺 NUMBER 转换为CHAR:使用 TO_CHAR函数可以实现数字到字符的转换,如: v_comm := TO_CHAR(‘123.45’) || ’元’ ; 􀁺 字符转换为日期:使用 TO_DATE函数可以实现 字符到日期的转换,如: v_date := TO_DATE('2001.07.03','yyyy.mm.dd'); 􀁺 日期转换为字符使用 TO_CHAR函数可以实现日期到字符的转换,如: v_to_day := TO_CHAR(SYSDATE, 'yyyy.mm.dd hh24:mi:ss') ; §2.7 变量作用范围及可见性在PL/SQL编程中,如果在变量的定义上没有做到统一的话,可能会隐藏一些危险的错误,这样的原因主要是变量的作用范围所致。与其它高级语言类似,PL/SQL的变量作用范围特点是:􀁺 变量的作用范围是在你所引用的程序单元(块、子程序、包)内。即从声明变量开始到该块的结束。􀁺 一个变量(标识)只能在你所引用的块内是可见的。􀁺 当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它可能不用了)。􀁺 在子块中重新定义该变量后,它的作用仅在该块内。 - 15 - 16 例10: DECLARE Emess char(80); BEGIN DECLARE V1 NUMBER(4); BEGIN SELECT empno INTO v1 FROM emp WHERE LOWER(job)=’president’; DBMS_OUTPUT.PUT_LINE(V1); EXCEPTION When TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE (‘More than one president’); END; DECLARE V1 NUMBER(4); BEGIN SELECT empno INTO v1 FROM emp WHERE LOWER(job)=’manager’; EXCEPTION When TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE (‘More than one manager’); END; EXCEPTION When others THEN Emess:=substr(SQLERRM,1,80); DBMS_OUTPUT.PUT_LINE (emess); END; §2.8 注释在PL/SQL里,可以使用两种符号来写注释,即:􀁺 使用双 ‘-‘ ( 减号) 加注释 PL/SQL允许用 – 来写注释,它的作用范围是只能在一行有效。如: V_Sal NUMBER(12,2); -- 工资变量。􀁺 使用 /* */ 来加一行或多行注释,如: /***********************************************/ /* 文件名: statistcs_sal.sql */ /***********************************************/ 提示:被解释存放在数据库中的 PL/SQL 程序,一般系统自动将程序头部的注释去掉。只有在 PROCEDURE 之后的注释才被保留;另外程序中的空行也自动被去掉。 - 16 - 17 §2.9 简单例子 §2.9.1 简单数据插入例子例11: /* 本例子仅是一个简单的插入,不是实际应用。 */ DECLARE v_ename VARCHAR2(20) := ‘Bill’; v_sal NUMBER(7,2) :=1234.56; v_deptno NUMBER(2) := 10; v_empno NUMBER(4) := 8888; BEGIN INSERT INTO emp ( empno, ename, JOB, sal, deptno , hiredate ) VALUES ( v_empno, v_ename, ‘Manager’, v_sal, v_deptno, TO_DATE(’1954.06.09’,’yyyy.mm.dd’) ); COMMIT; END; §2.9.2 简单数据删除例子例12: /* 本例子仅是一个简单的删除例子,不是实际应用。 */ DECLARE v_empno number(4) := 8888; BEGIN DELETE FROM emp WHERE empno=v_empno; COMMIT; END; - 17 - 18 第三章 PL/SQL流程控制语句介绍PL/SQL的流程控制语句, 包括如下三类: 􀁺 控制语句: IF 语句􀁺 循环语句: LOOP语句, EXIT语句􀁺 顺序语句: GOTO语句, NULL语句 §3.1 条件语句 IF <布尔表达式> THEN PL/SQL 和 SQL语句 END IF; IF <布尔表达式> THEN PL/SQL 和 SQL语句 ELSE 其它语句 END IF; IF <布尔表达式> THEN PL/SQL 和 SQL语句 ELSIF < 其它布尔表达式> THEN 其它语句 ELSIF < 其它布尔表达式> THEN 其它语句 ELSE 其它语句 END IF; 提示: ELSIF 不能写成 ELSEIF 例1: DECLARE v_empno emp.empno%TYPE :=&empno; V_salary emp.sal%TYPE; V_comment VARCHAR2(35); BEGIN SELECT sal INTO v_salary FROM emp WHERE empno=v_empno; IF v_salary<1500 THEN V_comment:= ‘Fairly less’; ELSIF v_salary <3000 THEN V_comment:= ‘A little more’; - 18 - 19 ELSE V_comment:= ‘Lots of salary’; END IF; DBMS_OUTPUT.PUT_LINE(V_comment); END; §3.2 CASE 表达式 CASE selector WHEN expression1 THEN result1 WHEN expression2 THEN result2 WHEN expressionN THEN resultN [ ELSE resultN+1] END; 例2: DECLARE V_grade char(1) := UPPER(‘&p_grade’); V_appraisal VARCHAR2(20); BEGIN V_appraisal := CASE v_grade WHEN ‘A’ THEN ‘Excellent’ WHEN ‘B’ THEN ‘Very Good’ WHEN ‘C’ THEN ‘Good’ ELSE ‘No such grade’ END; DBMS_OUTPUT.PUT_LINE(‘Grade:‘||v_grade||’ Appraisal: ‘|| v_appraisal); END; §3.3 循环 1. 简单循环 LOOP 要执行的语句; EXIT WHEN <条件语句> /*条件满足,退出循环语句*/ END LOOP; - 19 - 20 例 3. DECLARE int NUMBER(2) :=0; BEGIN LOOP int := int + 1; DBMS_OUTPUT.PUT_LINE('int 的当前值为:'||int); EXIT WHEN int =10; END LOOP; END; 2. WHILE 循环 WHILE <布尔表达式> LOOP 要执行的语句; END LOOP; 例4. DECLARE x NUMBER; BEGIN x:= 1; WHILE x<10 LOOP DBMS_OUTPUT.PUT_LINE('X的当前值为:'||x); x:= x+1; END LOOP; END; 3. 数字式循环 FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP 要执行的语句; END LOOP; 每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT 退出循环。例5. BEGIN FOR int in 1..10 LOOP DBMS_OUTPUT.PUT_LINE('int 的当前值为: '||int); END LOOP; END; 例 6. - 20 - 21 CREATE TABLE temp_table(num_col NUMBER); DECLARE V_counter NUMBER := 10; BEGIN INSERT INTO temp_table(num_col) VALUES (v_counter ); FOR v_counter IN 20 .. 25 LOOP INSERT INTO temp_table (num_col ) VALUES ( v_counter ); END LOOP; INSERT INTO temp_table(num_col) VALUES (v_counter ); FOR v_counter IN REVERSE 20 .. 25 LOOP INSERT INTO temp_table (num_col ) VALUES ( v_counter ); END LOOP; END ; DROP TABLE temp_table; §3.3 标号和GOTO PL/SQL中GOTO语句是无条件跳转到指定的标号去的意思。语法如下: GOTO label; . . . . . . <

发表于 @ 2006年03月26日 05:08:00|评论(loading...)

新一篇:  用.net实现远程获取其他网站页面内容!(核心代码分析)  | 旧一篇: SQL*PLUS命令的使用大全

用户操作
[即时聊天] [发私信] [加为好友]
zhanpeng
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
zhanpeng的公告
本blog纯粹属于技术资料的收集,如有版权问题,请告知
文章分类
收藏
    asp.net
    .net快速入门
    Ajax例子
    ajax资料的
    altas blog
    Asp.net
    ASP.NET Forums 官方中文网站
    asp.net2.0
    Blog
    blog lian
    chengking
    CSDN文档中心
    c-sharpcorner
    css学习网站
    dlying chen blog
    dotnet2.cnblogs
    goody9807'blog
    http://www.chinese-seo.com/jishu/index.asp(RSS)
    http://www.cnblogs.com/Clingingboy
    kingwkb的专栏
    LoveCherry
    NET——LOEVER
    nettip
    opensource webSite
    oracle学习
    tangdh BLOG
    Terry Blog
    torome'Blog
    w3c
    weekzero
    不明Blog
    中国BS网
    冷blog
    向东IT博客
    回归blog
    外文blog连接
    小武blog
    开发资料
    开发资料平台
    张三blog
    张老师Blog
    得风专栏
    技术收集
    李红跟blog
    水晶报表资料链接
    海东Blog
    王磊
    编程文档中心
    老猫的思想
    英雄本色BLOG
    邹建的BLOG
    铁拳的BLOG
    黄鸣blog
    asp.net2.0
    MSDN 技术文档链接
    net_lover
    shanhe(CommunityServer)
    高海东BLOG
    国外blog连接
    aspalliance
    Aspalliance
    C# coner
    donet news
    nikhilK
    ScotGu's Blog
    其他技术网站
    ASP.NET Forums 官方中文网站
    asp.net有关资料
    DNN
    http://www.oradb.net
    MSDN中文站
    oracle论坛
    web教学网
    一些 JS的 链接
    动态网站制作指南
    小山Blog
    存档
    软件项目交易
    Csdn Blog version 3.1a
    Copyright © zhanpeng