PLSQL语法介绍(有例子带注释)

合集下载

plsql建表 基本语句

plsql建表 基本语句

plsql建表基本语句在PL/SQL中,创建表的基本语句是使用CREATE TABLE命令。

以下是创建表的基本语法:sqlCREATE TABLEtable_name (column1 datatype[constraint],column2 datatype[constraint],column3 datatype[constraint],...);其中,table_name是表的名称,column1, column2, column3等是表中的列名,datatype是列的数据类型,constraint是可选的约束条件。

以下是一个示例,展示如何在PL/SQL中创建一个简单的表:sqlCREATE TABLE employees (employee_id NUMBER PRIMARYKEY,first_name VARCHAR2(50),last_name VARCHAR2(50),hire_date DATE,salary NUMBER(8,2) CHECK(salary > 0));在上面的示例中,我们创建了一个名为employees的表,包含了五个列:employee_id、first_name、last_name、hire_date和salary。

每个列都有相应的数据类型,并且为employee_id列设置了主键约束,为salary列设置了检查约束,确保工资大于0。

请注意,PL/SQL通常用于Oracle数据库的存储过程和函数,而创建表的语句实际上是在SQL部分执行的。

在Oracle SQL Developer 等工具中,可以直接执行上述SQL语句来创建表。

如果你需要在PL/SQL块中执行DDL语句(如CREATE TABLE),你可以使用动态SQL (例如EXECUTE IMMEDIATE语句)来实现。

PLSQL基本语法

PLSQL基本语法

PLSQL基本语法作者:gqk:1,什么是plsql: 是专⽤于Oracle服务器,在SQL基础之上,添加了⼀些过程化控制语句,叫PLSQL过程化包括有:类型定义,判断,循环,游标,异常或例外处理。

PLSQL强调过程2,Plsql语句块: PL/SQL程序都是以块(block)为基本单位,整个PL/SQL块分三部分:声明部分(⽤declare开头)执⾏部分(以 begin开头)其中执⾏部分是必须的,其他两个部分可选部分(以exception开头)结束:end--基本输出语句:BEGINdbms_output.put_line('hello,world');END;--基本输出语句BEGINdbms_output.put_line('hello,world');dbms_output.put_line(157);dbms_output.put_line(sysdate);dbms_output.put_line(true);--不能传⼊布尔值END;3,Plsql语句块分类: 匿名块:动态构造只执⾏⼀次(main)⼦程序:存储在数据库中的存储过程,函数及包等。

当在数据库建⽴好后可以在其他⼦程序中调⽤触发器:当数据库发⽣操作时,会触发⼀些事件,从⽽⾃动执⾏相应的程序4,Plsql中的变量类型:5,变量的使⽤: plsql中声明和执⾏部分要严格分开,在java中时先声明后写变量plsql中相反先声明在写数据类型: 变量在声明后没有赋值输出结果为空: 变量的声明和初始化:(boolean中只能声明不能输出)DECLAREi NUMBER(4) := 157;j NUMBER(6);c VARCHAR2(200) := 'HELLO,WORLD';d DATE := sysdate;b BOOLEAN := TRUE;BEGINj := 1000;--只能写在执⾏部分dbms_output.put_line('i=' || i);dbms_output.put_line('j=' || j);dbms_output.put_line('c=' || c);dbms_output.put_line('d=' || d);END;在声明快中对常量的声明: 变量名称【constant】 type 【not null】【:value】DECLAREc CONSTANT NUMBER(4) := 100;c2 NUMBER(4) NOT NULL := 101;BEGIN--c := 101; --常量不能重复赋值dbms_output.put_line('c=' || c);dbms_output.put_line('c2=' || c2);END; --空语句 NULL 执⾏语句中必须写东西DECLAREc CONSTANT NUMBER(4) := 100;c2 NUMBER(4) NOT NULL := 101;BEGINNULL;--空语句,作为占位符使⽤END; 6,PLSQL中使⽤sql: --更新100员⼯,⼯资增加1块钱 :(不能再执⾏块中直接输出select语句)声明变量:员⼯的编号声明变量:⼯资追加的钱数DECLAREv_empid BINARY_INTEGER := 100;v_money BINARY_INTEGER := 1;BEGINUPDATE employees SET salary=salary+v_moneyWHERE employee_id=v_empid;COMMIT;END;PLSQL中使⽤SQL语句的⼏种情况:DML或DCL语句:直接执⾏ 查询语句:SELECT...INTO 或者游标DDL语句:动态SQL执⾏  7,SELECT...INTO...的使⽤:语法:SELECT 列1,列2,…… INTO 变量1,变量2,……--查询某个员⼯编号的姓名和⼯资:员⼯编号姓名⼯资 列和变量的顺序,个数必须保持⼀致(如果没有数据则会抛出异常,返回的结果超过⼀⾏也会有异常)DECLAREv_empid BINARY_INTEGER := 101;v_name VARCHAR2(50);v_salary NUMBER(8,2);BEGINSELECT last_name,salaryINTO v_name,v_salaryFROM employeesWHERE employee_id=v_empid;dbms_output.put_line(v_empid || ',' || v_name || ',' || v_salary);END;--查询某个员⼯编号的姓名,⼯资,⼊职⽇期,部门编号:(以上思路我们需要声明多个变量) DECLAREv_empid BINARY_INTEGER := 101;v_name VARCHAR2(50);v_salary NUMBER(8,2);v_hiredate DATE;v_deptid BINARY_INTEGER;BEGINSELECT last_name,salary,hire_date,department_idINTO v_name,v_salary,v_hiredate,v_deptidFROM employeesWHERE employee_id=v_empid;dbms_output.put_line(v_empid || ',' || v_name || ','|| v_salary || ',' || v_hiredate || ',' || v_deptid);END;java中处理多个数据我们可以封装为对象:plsql中可以声明记录类型:时把逻辑相关的数据作为⼀个单元存储起来:--记录类型record--查询某个员⼯编号的姓名,⼯资,⼊职⽇期,部门编号DECLARETYPE emp_record_type IS RECORD (empid BINARY_INTEGER := 102,ename VARCHAR2(50),salary NUMBER(8,2),hiredate DATE,deptid BINARY_INTEGER);e emp_record_type;BEGINSELECT employee_id,last_name,salary,hire_date,department_idINTO eFROM employeesWHERE employee_id=e.empid;dbms_output.put_line(e.empid);dbms_output.put_line(e.ename);dbms_output.put_line(e.salary);dbms_output.put_line(e.hiredate);dbms_output.put_line(e.deptid);END; --参照引⽤类型:参照已有的数据类型--参照引⽤类型--参照引⽤变量类型:变量名称%TYPE--参照引⽤表中的列类型:表名.列名%TYPE--参照引⽤表的记录类型:表名%ROWTYPE demo:DECLAREi NUMBER(4);j i%TYPE := 100;--参照i的类型k employees.employee_id%TYPE := 101;--参照员⼯表中员⼯编号的数据类型BEGINdbms_output.put_line('j=' || j);dbms_output.put_line('k=' || k);END;--查询某个员⼯编号的姓名,⼯资,⼊职⽇期,部门编号(参照类型)DECLARETYPE emp_record_type IS RECORD (empid employees.employee_id%TYPE := 102,ename st_name%TYPE,salary employees.salary%TYPE,hiredate employees.hire_date%TYPE,deptid employees.department_id%TYPE);e emp_record_type;BEGINSELECT employee_id,last_name,salary,hire_date,department_idINTO eFROM employeesWHERE employee_id=e.empid;dbms_output.put_line(e.empid);dbms_output.put_line(e.ename);dbms_output.put_line(e.salary);dbms_output.put_line(e.hiredate);dbms_output.put_line(e.deptid);END; --查询某个员⼯编号的姓名,⼯资,⼊职⽇期,部门编号(参照引⽤表的记录类型)DECLAREe employees%ROWTYPE;BEGINe.employee_id := 103;SELECT *INTO eFROM employeesWHERE employee_id=e.employee_id;dbms_output.put_line(e.employee_id);dbms_output.put_line(st_name);dbms_output.put_line(e.salary);dbms_output.put_line(to_char(e.hire_date,'yyyy-mm-dd'));dbms_output.put_line(e.department_id);END;--PLSQL表类型 /*TYPE ⾃定义类型名称 IS TABLE OF 元素类型INDEX BY BINARY_INTEGER;*/DECLARETYPE name_table_type IS TABLE OF VARCHAR2(50)INDEX BY BINARY_INTEGER;n name_table_type;BEGINn(-7) := 'tom';n(4) := 'jack';n(9) := 'rose';dbms_output.put_line('元素的长度:' || n.count);dbms_output.put_line(n(4));END; --表类型的常⽤属性DECLARETYPE name_table_type IS TABLE OF VARCHAR2(50)INDEX BY BINARY_INTEGER;n name_table_type;BEGIN--设置元素n(-5) := 'tom';n(3) := 'jack';n(17) := 'rose';n(23) := 'zhang';n(24) := 'wangwu';--删除指定下标的元素--n.delete(17);--删除⼀个范围的元素--n.delete(10,24);--删除所有元素--n.delete;--返回元素长度dbms_output.put_line('元素个数:' || n.count);--判断下标是否存在IF n.exists(17) THENdbms_output.put_line('true');ELSEdbms_output.put_line('false');END IF;--输出最⼩下标dbms_output.put_line(n.first);--输出最⼤下标dbms_output.put_line(st);--返回指定下标的元素dbms_output.put_line(n(3));--返回上⼀个或下⼀个存在的下标,如果没有,返回NULLdbms_output.put_line(n.next(10));dbms_output.put_line(n.prior(10));END;--BULK COLLECT INTO:把查询结果⼀次性赋给⼀个表类型的变量,下标⾃动从1开始递增 --查询所有的员⼯姓名,存储到⼀个表类型的变量中DECLARETYPE name_table_type IS TABLE OF VARCHAR2(50)INDEX BY BINARY_INTEGER;n name_table_type;BEGINSELECT last_name BULK COLLECT INTO nFROM employees;dbms_output.put_line('元素长度:' || n.count);dbms_output.put_line(n(2));END;--查询所有的员⼯信息,存储到⼀个表类型的变量中DECLARETYPE emp_table_type IS TABLE OF employees%ROWTYPEINDEX BY BINARY_INTEGER;e emp_table_type;BEGINSELECT * BULK COLLECT INTO eFROM employees;dbms_output.put_line('元素长度:' || e.count);dbms_output.put_line(e(2).last_name);dbms_output.put_line(e(3).salary);END; 8,DML语句返回值:--RETURNING语句:DML操作返回值赋给变量RETURN 列1,列2,... INTO 变量1,变量2,...--更新某个员⼯的⼯资,输出这个员⼯姓名,新⼯资DECLAREv_empid employees.employee_id%TYPE := 100;v_name st_name%TYPE;v_money employees.salary%TYPE := 1;v_salary employees.salary%TYPE;BEGINUPDATE employeesSET salary=salary+v_moneyWHERE employee_id=v_empidRETURNING last_name,salaryINTO v_name,v_salary;dbms_output.put_line('姓名:' || v_name);dbms_output.put_line('新⼯资:' || v_salary);END; --插⼊语句中使⽤RETURNING语句:DECLAREd dept%ROWTYPE;BEGININSERT INTO dept VALUES (50,'AA','BB')RETURN deptno,dname,loc INTO d;dbms_output.put_line(d.deptno);dbms_output.put_line(d.dname);dbms_output.put_line(d.loc);END; --删除语句中使⽤RETURNING语句DECLAREd dept%ROWTYPE;BEGINDELETE FROM deptWHERE deptno=50RETURN deptno,dname,loc INTO d;dbms_output.put_line(d.deptno);dbms_output.put_line(d.dname);dbms_output.put_line(d.loc);END; --DML操作返回多⾏数据--更新某个部门的员⼯的⼯资,返回被更新的员⼯姓名,新⼯资DECLARETYPE emp_record_type IS RECORD (ename st_name%TYPE,salary employees.salary%TYPE);TYPE emp_table_type IS TABLE OF emp_record_typeINDEX BY BINARY_INTEGER;e emp_table_type;BEGINUPDATE employeesSET salary=salary+1WHERE department_id=50RETURN last_name,salary BULK COLLECT INTO e; dbms_output.put_line('更新了' || e.count || '个员⼯'); dbms_output.put_line(e(1).ename || ',' || e(1).salary); END;。

plsql + 的用法

plsql + 的用法

plsql + 的用法==========PlSql,全称为PL/SQL,是Oracle数据库中一种常用的编程语言。

本篇文章将详细介绍PlSql的用法,包括其基本语法、开发环境设置、常用函数和语句等。

一、基本语法-----PlSql的基本语法包括声明、赋值和执行语句。

以下是一个简单的PlSql程序示例:```sqlDECLAREv_name VARCHAR2(50);v_age NUMBER;BEGINv_name := '张三';v_age := 25;DBMS_OUTPUT.PUT_LINE('姓名: ' || v_name || ', 年龄: ' || v_age);END;```上述代码中,我们声明了两个变量v_name和v_age,并分别赋值为字符串和数字类型。

然后使用DBMS_OUTPUT.PUT_LINE语句输出结果。

在PlSql中,可以使用Oracle提供的输出函数来输出变量的值。

二、开发环境设置要编写和运行PlSql程序,需要安装Oracle数据库客户端,并配置开发环境。

具体步骤如下:1. 安装Oracle数据库客户端,并确保数据库服务已启动。

2. 打开Oracle SQL Developer或其他Oracle数据库管理工具。

3. 创建一个数据库连接,并选择要使用的数据库。

4. 在工具中打开一个新的PlSql编辑器窗口或创建一个新的PlSql文件。

三、常用函数和语句---------PlSql提供了许多内置函数和语句,用于处理数据、执行操作和生成结果。

以下是一些常用的函数和语句:* 数据类型转换函数:TO_CHAR、TO_NUMBER等。

* 字符串操作函数:SUBSTR、LENGTH、REPLACE等。

* 日期操作函数:YEAR、MONTH、DAY等。

* 控制语句:BEGIN...END、LOOP、WHILE、CASE等。

* 异常处理语句:EXCEPTION、RAISE等。

plsql用法,操作介绍

plsql用法,操作介绍

plsql用法,操作介绍PL/SQL是Oracle数据库中一种重要的编程语言,它提供了强大的数据处理和数据库操作能力。

本文将向大家介绍PL/SQL的用法和操作。

一、PL/SQL基础PL/SQL是一种过程化的编程语言,它可以在Oracle数据库中执行存储过程、函数、触发器和包等对象。

这些对象可以由用户自定义,并在数据库中存储,以供其他用户调用。

PL/SQL提供了丰富的数据类型、控制结构、函数和过程,使得开发者可以方便地编写复杂的数据库操作程序。

二、PL/SQL语法1. 声明语句:在PL/SQL中,需要先声明变量和常量,常见的声明语句有:变量声明(如:变量类型数据类型;),常量声明(如:CONST 常量名数据类型 = 值)。

2. 条件语句:PL/SQL支持多种条件语句,如IF-THEN-ELSE,CASE表达式等。

3. 循环语句:PL/SQL支持FOR循环、WHILE循环和LOOP循环等。

4. 异常处理:PL/SQL提供了异常处理机制,可以捕获和处理运行时出现的错误。

5. 函数和过程:PL/SQL支持定义函数和过程,可以对数据进行操作并返回结果。

三、PL/SQL操作1. 创建存储过程:可以使用CREATE PROCEDURE语句创建存储过程,指定过程的名称、参数和执行逻辑。

2. 调用存储过程:可以使用CALL语句调用存储过程,并传递参数。

3. 创建函数:可以使用CREATE FUNCTION语句创建函数,指定函数的名称、参数和返回值类型。

4. 调用函数:可以使用直接调用函数的方式或通过存储过程调用函数。

5. 创建触发器:可以使用CREATE TRIGGER语句创建触发器,用于在数据插入、更新或删除时触发特定的操作。

6. 修改和删除对象:可以使用ALTER PROCEDURE、DROP PROCEDURE、DROP FUNCTION等语句修改或删除已存在的PL/SQL对象。

四、示例以下是一个简单的PL/SQL程序示例,用于将输入的字符串转换为大写并输出:```plsqlDECLAREv_str VARCHAR2(100);v_upper VARCHAR2(100);BEGIN-- 获取输入字符串:in_str := 'hello world';v_str := :in_str;-- 将字符串转换为大写并输出v_upper := UPPER(v_str);DBMS_OUTPUT.PUT_LINE('转换后的字符串为: ' || v_upper);END;```在上述示例中,我们使用了DECLARE语句声明了两个变量v_str 和v_upper,分别用于存储输入的字符串和转换后的结果。

PLSQL语法

PLSQL语法

PLSQL语法Procedural Language和SQL的结合体。

通过增加变量、控制语句,使我们可以写些逻辑更加复杂的数据库操作语句框架组成declare – 可选声明各种变量或游标的地⽅。

begin – 必要开始执⾏语句。

--单⾏注释语句⽤两个连在⼀起的‘-’表⽰。

/*多⾏注释语句,可以换⾏*/exception – 可选出错后的处理。

end; – 必要(请注意end后⾯的分号)简单helloworld程序1declare2 v_temp number(6):=123; /* := 是⼀个赋值符号 */3begin4 dbms_output.put_line('middle');5 dbms_output.put_line(v_temp);6end;注意要想显⽰程序的东西需要设置环境set serveroutput off -->关闭输出(默认关闭)set serveroutput on -->打开输出基本数据类型Number 数字型Int 整数型Pls_integer 整数型,产⽣溢出时出现错误Binary_integer 整数型,表⽰带符号的整数Char 定长字符型,最⼤255个字符Varchar2 变长字符型,最⼤2000个字符Long 变长字符型,最长2GBDate ⽇期型Boolean 布尔型(TRUE、FALSE、NULL三者取⼀)%type 表⽰不需要知道具体的⼀个字段类型,与指定的字段类型⼀致即可。

例如:v_empno emp.empno%type;%rowtype 与表结构完全⼀致 %rowtype 举例:1declare2 v_tt emp%rowtype;3begin4select*into v_tt from emp where empno=7521;5 dbms_output.put_line(v_tt.job);6 dbms_output.put_line(v_tt.sal);7end;89输出:SALESMAN101250varray定义语法TYPE VARRAY NAMEIS VARRAY(SIZE) OF ELEMENT TYPE [NOT NULL];其中,varray name是VARRAY数据类型的名称,size是正整数,表⽰可以容纳的成员的最⼤数量,每个成员的数据类型是element typeo默认时,成员可以取空值,否则需要使⽤NOT NULL加以限制。

plsql loop用法-概述说明以及解释

plsql loop用法-概述说明以及解释

plsql loop用法-概述说明以及解释1.引言1.1 概述PL/SQL循环是编程语言PL/SQL中非常重要的一个概念。

在编写程序时,经常会遇到需要重复执行某些代码块的情况,这时就需要使用循环语句来实现。

PL/SQL循环提供了多种类型的循环结构,可以根据具体的需求选择合适的循环方式。

循环结构可以帮助程序实现重复执行的需求,提高了代码的可复用性和效率。

通过循环,可以反复执行一段代码,直到满足某个条件退出循环或达到循环执行的次数上限。

PL/SQL循环的语法和用法非常灵活,可以根据不同的需求选择不同的循环方式,如FOR循环、WHILE循环和LOOP循环等。

每种循环方式都有其特殊的应用场景,可以根据具体的编程需求选择最适合的循环结构。

本文将详细介绍PL/SQL循环的基本概念、语法和用法,并举例说明不同类型循环的具体应用场景。

我们将深入探讨循环结构在程序中的重要性,以及如何灵活运用循环语句来解决实际编程中的问题。

在进一步研究和学习PL/SQL循环的过程中,我们建议读者通过阅读相关文献和教程,参与实际的编程实践,以加深对循环结构的理解和掌握。

只有深入学习并不断实践,才能在编程中熟练运用循环语句,提高代码的可维护性和可扩展性。

总之,PL/SQL循环是编程中不可或缺的一部分,理解和掌握循环结构的基本概念和用法对于开发高效、可靠的程序至关重要。

在接下来的正文部分,我们将详细介绍PL/SQL循环的相关内容,帮助读者深入了解和运用循环语句。

1.2 文章结构本文将介绍PL/SQL循环的用法,包括循环的基本概念、语法和用法。

文章分为三个主要部分:引言、正文和结论。

在引言部分,我们将概述本文的主题和目的。

PL/SQL循环作为PL/SQL语言中的重要概念之一,对于程序的控制流非常关键。

通过深入探讨PL/SQL循环的用法,我们可以提高代码的效率,增强程序的可读性和可维护性。

在正文部分,将首先介绍PL/SQL循环的基本概念。

我们将解释什么是循环以及循环的作用和优势。

PLSQL语法总结

PLSQL语法总结

PLSQL语法总结1.PL/SQL块:Declare——可选变量、常量、游标、用户自定义的特殊类型Begin——必须SQL语句PL/SQL语句Exception——可选错误发生时的处理动作End;——必须2.Identifier [constant] datatype [not null] [:=|default expr];声明PL/SQL变量3.Set serveroutput on:显示由DBMS_OUTPUT.PUT_LINE输出的结果4.Variable_name table.column_name%type;:由表中已存在的列定义新数据类型v_sal emp.sal%type;5.Identifier:=expr;:变量的赋值6.SELECT select_listINTO {variable_name[, variable_name]…| record_name}FROM tableWHERE condition;从数据库中获取数据7.IF no>0 THENStatements;[ELSIF no=0 THENStatements;][ELSEStatements;]END IF;条件判断语句8.LOOPStatement1;…EXIT[WHEN condition];END LOOP;基本LOOP循环语句9.FOR counter in [REVERSE]Lower_bound..upper_bound LOOPStatement1;Statement2;…END LOOP;FOR循环语句declarev emp%rowtype;beginfor i in 7000..8000 loopbeginselect * into v from empwhere empno = i and sal > 1300 ;dbms_output.put_line(v.ename||' is '||v.sal);exceptionwhen no_data_found then null;end;end loop;end;10.TYPE type_name IS RECORD (组合类型之record)(field_declaration[,field_declaration]…);Field_name{field_type|variable%TYPE|table.column%TYPE|table%ROWTYPE}[[NOT NULL]{:= | DEFAULT}expr]Recordtype type_name定义一个记录declaretype mrec is record(name emp.ename%type,sal emp.sal%type);r mrec;beginselect ename, sal into rfrom emp where empno = 7839;dbms_output.put_line( || ' has sal: ' || r.sal);end;/11.TYPE type_name IS TABLE OF (组合类型之index by table)(column_type | variable%type| table.column%type)[NOT NULL][INDEX BY BINARY_INTEGER];Identifier type_name;创建一个PL/SQL表DECLARETYPE ibt IS TABLE OFVARCHAR2(32)INDEX BY BINARY_INTEGER;v ibt;BEGINV(-12) := 'aaa';V(2) := 'BBB';V(0) := 'C';DBMS_OUTPUT.PUT_LINE(V(-12));DBMS_OUTPUT.PUT_LINE(V(0));DBMS_OUTPUT.PUT_LINE(V(2));END;12.CURSOR cur_name IS Select_statementFROM TABLE WHERE ...;声明游标13.OPEN cur_name;打开游标14.FETCH cur_name INTO v;|record_name];从游标中提取数据15.CLOSE cur_name;关闭游标DECLARECURSOR CRS IS SELECT ENAME, SAL, DNAMEFROM EMP JOIN DEPT USING(DEPTNO)WHERE DEPTNO !=10AND SAL BETWEEN 1500 AND 3000;V CRS%ROWTYPE;BEGINOPEN CRS;LOOPFETCH CRS INTO V;EXIT WHEN CRS%NOTFOUND;DBMS_OUTPUT.PUT_LINE(V.ENAME || ' ' || V.SAL || ' ' || V.DNAME);END LOOP;CLOSE CRS;END;16.FOR record_name IN cur_name LOOPStatement1;Statement2;…END LOOP;游标式的FOR循环DECLARECURSOR C IS SELECT * FROM EMPWHERE SAL BETWEEN 1500 AND 3000AND DEPTNO = 30;BEGINFOR V IN C LOOPDBMS_OUTPUT.PUT_LINE(V.ENAME || ' HAS SAL: ' || V.SAL);END LOOP;END;17.SELECT…FROM…FRO UPDATE [OF column_reference][NOWAIT];在事务执行期间显示锁定以拒绝访问,在更新或删除时锁定该行18.WHERE CURRENT OF cursor;更新或删除游标中当前行的数据19.CREATE [OR REPLACE] PROCEDURE procedure_name[(parameter1 [mode1] datatype1,Parameter2 [mode2] datatype2,…)]IS|ASPL/SQL Block;创建一个过程20.DROP PROCEDURE procedure_name删除过程21.CREATE [OR REPLACE] FUCTION function_name[(parameter1 [mode1] datatype1,Parameter2 [mode2] datatype2,…)]RETURN datatypeIS|ASPL/SQL Block;创建函数22.DROP FUNCTION function_name删除函数23.CREATE [OR REPLACE] PACKAGE Package_nameIS|AS公共变量,异常,游标,子程序声明END package_name;创建一个包声明24.CREATE OR REPLACE PACKAGE BODY package_nameIS私有的变量,静态变量,游标,异常,类型,子程序,子程序体 END package_name;创建包体25.DROP PACKAGE package_name;删除包26.DROP PACKAGE BODY package_name;只删除包主体27.。

plsql用法

plsql用法

plsql用法PL/SQL是一种过程化编程语言,它是Oracle数据库的一部分,用于编写存储过程、触发器、函数和包等数据库对象。

PL/SQL具有与SQL相同的数据类型和语法,同时还具有流程控制语句、异常处理和面向对象编程的特性。

在Oracle数据库中,PL/SQL是一种非常重要的编程语言,它可以提高数据库的性能和安全性。

PL/SQL的基本语法PL/SQL的基本语法与SQL相似,但它还包括了一些额外的语法元素。

以下是PL/SQL的基本语法:1. 声明变量和常量DECLAREvariable_name datatype [NOT NULL := value];constant_name CONSTANT datatype := value;BEGIN-- PL/SQL code goes hereEND;2. 控制流语句IF condition THEN-- code to execute if condition is trueELSIF condition THEN-- code to execute if the first condition is false and this condition is trueELSE-- code to execute if all conditions are falseEND IF;CASE variableWHEN value1 THEN-- code to execute if variable equals value1WHEN value2 THEN-- code to execute if variable equals value2ELSE-- code to execute if variable does not equal any of the specified valuesEND CASE;FOR variable IN [REVERSE] lower_bound..upper_bound LOOP -- code to execute for each value of variable betweenlower_bound and upper_boundEND LOOP;WHILE condition LOOP-- code to execute while condition is trueEND LOOP;3. 异常处理BEGIN-- PL/SQL code goes hereEXCEPTIONWHEN exception1 THEN-- code to execute if exception1 is raisedWHEN exception2 THEN-- code to execute if exception2 is raisedELSE-- code to execute if any other exception is raised END;4. 存储过程和函数CREATE [OR REPLACE] PROCEDURE procedure_name(parameter1 datatype, parameter2 datatype, ...)AS-- PL/SQL code goes hereBEGIN-- code to execute when the procedure is calledEND;CREATE [OR REPLACE] FUNCTION function_name(parameter1 datatype, parameter2 datatype, ...)RETURN return_datatypeAS-- PL/SQL code goes hereBEGIN-- code to execute when the function is calledEND;PL/SQL的优点1. 提高数据库性能PL/SQL可以在数据库中执行,这意味着它可以利用数据库的优化器和缓存机制来提高性能。

PLSQL语法以及程序编写介绍

PLSQL语法以及程序编写介绍

NCHAR:来存储Unicode字符集的定长 字符型数据,长度<= 1000 字节。它的声明 方式与CHAR相同。 NVARCHAR2:用来存储Unicode字符 集的变长字符型数据,长度<= 1000 字节。 它的声明方式与VARCHAR2相同。 LONG:用来存储最大长度为2GB的变 长字符数据。
七、条件逻辑 在PL/SQL中,可以使用命令if,else和elsif来控 制可执行命令段的命令流。下面列出了可用的条 件逻辑命令的格式(循环条件除外) 格式1: if <条件> then <命令> elsif <条件> then <命令> else <命令> end if;
格式2: if <条件> then if <条件> then <命令> end if; else <命令> end if; 总的说来除了格式上与C略有区别,其它都 是一样的
实际数据
7456123.89 7456123.89 பைடு நூலகம்456123.89 7456123.89 7456123.89 7456123.89 7456123.89
定义
NUMBER NUMBER(9) NUMBER(9,2) NUMBER(9,1) NUMBER(6) NUMBER(7,-2) NUMBER(7,2)
area_id
1 2
addr_zipcode
325200 325400
3
4 5 6 7 8
325800
325100 325600 325700 325300 325500
其他
325000
八、循环 在一个单独的PL/SQL代码块中可以使用 循环处理多个记录。PL/SQL支持三种类型 的循环。 简单循环

PLSQL简明教程

PLSQL简明教程

PL/SQL 简明教程什么是PL/SQL结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,它属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单的调用相应语句来直接取得结果即可。

例:delete from students where major=‘Nutrition’;然而,对于有些复杂的业务流程又要求相应的程序来描述,那么4GL就有些无能为力了。

PL/SQL通过增加了用在其它过程性语言中的结构来对SQL进行了扩展,使得它不仅仅是一个数据库查询语言,而且也是一个编程语言。

课程内容一PL/SQL 基本查询与排序本课重点:1、写SELECT 语句进行数据库查询2、进行数学运算3、处理空值4、使用别名ALIASES5、连接列6、在SQL PLUS 中编辑缓冲,修改SQL SCRIPTS7、ORDER BY 进行排序输出。

8、使用WHERE 字段。

一、写SQL 命令:不区分大小写。

SQL 语句用数字分行,在SQL PLUS 中被称为缓冲区。

最后以;或/ 结束语句。

也可以用RUN 来执行语句二、例1:SQL> SELECT dept_id, last_name, manager_id2 FROM s_emp;2:SQL> SELECT last_name, salary * 12, commission_pct2 FROM s_emp;对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。

SQL> SELECT last_name, salary, 12 * (salary + 100)2 FROM s_emp;三、列的别名ALIASES:计算的时候特别有用;紧跟着列名,或在列名与别名之间加“AS”;如果别名中含有SPACE,特殊字符,或大小写,要用双引号引起。

例(因字体原因,读者请记住:引号为英文双引号Double Quotation):SQL> SELECT last_name, salary,2 12 * (salary + 100) ”Annual Salary”3 FROM s_emp;四、连接符号:||连接不同的列或连接字符串使结果成为一个有意义的短语:SQL> SELECT first_name || ‟‟ || last_name2 || ‟, ‟|| title ”Employees”3 FROM s_emp;五、管理NULL 值:SQL> SELECT last_name, title,2 salary * NVL(commission_pct,0)/100 COMM3 FROM s_emp;此函数使NULL 转化为有意义的一个值,相当于替换NULL。

plsql实例讲解

plsql实例讲解

PL/SQL块语法PL/SQL块中的每一条语句都必须以分号结束,SQL语句可以使多行的,但分号表示该语句的结束。

一行中可以有多条SQL语句,他们之间以分号分隔。

每一个PL/SQL块由BEGIN或DECLARE开始,以END结束。

注释由--标示。

PL/SQL块的命名和匿名PL/SQL程序块可以是一个命名的程序块也可以是一个匿名程序块。

匿名程序块可以用在服务器端也可以用在客户端。

命名程序块可以出现在其他PL/SQL程序块的声明部分,这方面比较明显的是子程序,子程序可以在执行部分引用,也可以在异常处理部分引用。

PL/SQL程序块可被独立编译并存储在数据库中,任何与数据库相连接的应用程序都可以访问这些存储的PL/SQL程序块。

ORACLE提供了四种类型的可存储的程序://函数,过程,包,触发器. 函数. 过程. 包. 触发器函数function函数是命名了的、存储在数据库中的PL/SQL程序块。

函数接受零个或多个输入参数,有一个返回值,返回值的数据类型在创建函数时定义。

定义函数的语法如下:过程procedure存储过程是一个PL/SQL程序块,接受零个或多个参数作为输入(INPUT)或输出(OUTPUT)、或既作输入又作输出(INOUT),与函数不同,存储过程没有返回值,存储过程不能由SQL语句直接使用,只能通过EXECUT命令或PL/SQL程序块内部调用,定义存储过程的语法如下:实例如下:PROCEDURE commpellent_summary_main(in_operation_date VARCHAR2) --(out_msg OUT NUMBER)ISv_operation_date DATE;v_control_seq NUMBER;v_summary_count NUMBER;err VARCHAR2 (200);out_msg NUMBER;BEGINv_summary_count := 0;SELECT pay_program_control_log_seq.NEXTVALINTO v_control_seqFROM DUAL;INSERT INTO PAY_PROGRAM_CONTROL_LOG(run_seq, program_name, run_start_time, status)VALUES(v_control_seq, 'payment_compellent_summary', SYSDATE,);COMMIT;IF in_operation_date IS NULL THENv_operation_date := SYSDATE-1;ELSEv_operation_date :=TO_DATE(in_operation_date,'yyyy-mm-dd');END IF;csr_commpellent_summary (v_operation_date, v_summary_count);office_commpellent_summary (v_operation_date);--调用强制插入回单表commpellent_insert_response(v_operation_date);--调用日核销报表程序--Rpt_Payment_Extract.extract_main(TO_CHAR(v_operation_date,'yyyymmdd '));UPDATE PAY_PROGRAM_CONTROL_LOGSET run_end_time = SYSDATE,run_counts = v_summary_count,status = 1WHERE run_seq = v_control_seq;out_msg := 0;COMMIT;EXCEPTIONWHEN OTHERSTHENout_msg := -1;err := SQLERRM;UPDATE PAY_PROGRAM_CONTROL_LOGSET run_end_time = SYSDATE,run_counts = v_summary_count,status = out_msg,err_desc = SUBSTR (err, 1, 200)WHERE run_seq = v_control_seq;COMMIT;END commpellent_summary_main;包(package)包其实就是被组合在一起的相关对象的集合,当包中任何函数或存储过程被调用,包就被加载入内存中,包中的任何函数或存储过程的子程序访问速度将大大加快。

PLSQL语法介绍(有例子带注释)

PLSQL语法介绍(有例子带注释)

PLSQL语法介绍(有例子带注释)关键字: oracle/plsql/游标/存储过程/触发器--最简单的语句块set serveroutput on; //用于输出显示begindbms_output.put_line('HeloWorld');end;--一个简单的PL/SQL语句块declare //声明变量,必须 v_ 开头v_name varchar2(20);beginv_name := 'myname'; //变量的赋值格式dbms_output.put_line(v_name);end;--语句块的组成declarev_num number := 0;beginv_num := 2/v_num;dbms_output.put_line(v_num);exception //如果没有这部分,当出现异常的时候,就执行过不去when others thendbms_output.put_line('error');end;--变量声明的规则1): 变量名不能够使用保留字,如from、select等2): 第一个字符必须是字母3): 变量名最多包含30个字符4): 不要与数据库的表或者列同名5): 每一行只能声明一个变量--常用变量类型1): binary_integer: 整数,主要用来计数而不是用来表示字段类型2): number: 数字类型3): char: 定长字符串4): varchar2: 变长字符串5): date: 日期6): long: 长字符串,最长2GB7): boolean: 布尔类型,可以取值为 true、false和null--变量声明,可以使用 %type 属性declarev_empno number(4);v_empno2 emp.empno%type;//表示该变量的类型和emp表中的empno字段保持一致。

plsql注释sql语句

plsql注释sql语句

plsql注释sql语句PL/SQL是Oracle数据库中的一种编程语言,它是一种过程化语言,可以用于创建存储过程、触发器、函数等数据库对象。

在PL/SQL中,注释是一种非常重要的功能,它可以帮助程序员更好地理解代码,提高代码的可读性和可维护性。

PL/SQL中的注释有两种:单行注释和多行注释。

单行注释以两个减号(--)开头,多行注释以“/*”开头,“*/”结尾。

下面是一个例子:-- 这是一个单行注释/*这是一个多行注释*/在PL/SQL中,注释可以用于解释代码的作用、参数的含义、变量的用途等等。

下面是一个例子:-- 这个存储过程用于计算两个数的和CREATE OR REPLACE PROCEDURE add_numbers (num1 IN NUMBER,num2 IN NUMBER,sum OUT NUMBER)ISBEGIN-- 计算两个数的和sum := num1 + num2;END;在上面的例子中,注释用于解释存储过程的作用和参数的含义,以及解释代码的作用。

除了用于解释代码外,注释还可以用于调试代码。

在调试代码时,程序员可以使用注释来暂时禁用一些代码,或者添加一些调试信息。

下面是一个例子:-- 这个存储过程用于计算两个数的和CREATE OR REPLACE PROCEDURE add_numbers (num1 IN NUMBER,num2 IN NUMBER,sum OUT NUMBER)ISBEGIN-- 计算两个数的和sum := num1 + num2;/* 调试信息DBMS_OUTPUT.PUT_LINE('num1=' || num1);DBMS_OUTPUT.PUT_LINE('num2=' || num2);DBMS_OUTPUT.PUT_LINE('sum=' || sum);*/END;在上面的例子中,调试信息被注释掉了,如果需要调试代码,程序员可以将注释去掉。

plsql基本语法

plsql基本语法

plsql基本语法PL/SQL基本语法PL/SQL是一种结构化查询语言,用于编写存储过程、触发器、函数和包等数据库对象。

本文将介绍PL/SQL的基本语法,包括变量声明、控制结构、异常处理等。

1. 变量声明在PL/SQL中,可以使用关键字DECLARE来声明变量。

变量可以有不同的数据类型,如整型、浮点型、字符型等。

以下是一个示例:DECLAREnum1 NUMBER := 10;num2 NUMBER := 20;total NUMBER;2. 控制结构PL/SQL支持多种控制结构,如条件语句和循环语句。

条件语句包括IF-THEN-ELSE和CASE语句。

IF-THEN-ELSE用于根据条件执行不同的代码块,示例如下:IF num1 > num2 THENtotal := num1 + num2;ELSEtotal := num1 - num2;END IF;CASE语句用于根据不同的值执行不同的代码块,示例如下:CASE num1WHEN 1 THEN total := num2 + 10;WHEN 2 THEN total := num2 - 10;ELSE total := num2;END CASE;循环语句包括FOR循环和WHILE循环。

FOR循环用于指定循环次数,示例如下:FOR i IN 1..10 LOOPtotal := total + i;END LOOP;WHILE循环用于在满足条件的情况下循环执行代码块,示例如下:WHILE num1 > 0 LOOPtotal := total + num1;num1 := num1 - 1;END LOOP;3. 异常处理PL/SQL提供了异常处理机制,用于捕获和处理运行时错误。

可以使用关键字EXCEPTION来定义异常处理块。

以下是一个示例:BEGINtotal := num1 / num2;EXCEPTIONWHEN ZERO_DIVIDE THENtotal := NULL;END;上述代码中,如果num2为0,则会抛出ZERO_DIVIDE异常,异常处理块会将total赋值为NULL。

PLSQL的书写及语法

PLSQL的书写及语法

详细讲述PLSQL的书写及语法1、PLSQL语法1.1、程序结构PL/SQL程序都是以块(block)为基本单位。

整个PL/SQL块分三部分:声明部分(用declare开头)、执行部分(以begin 开头)和异常处理部分(以exception开头)。

其中执行部分是必须的,其他两个部分可选。

无论PL/SQL程序段的代码量有多大,其基本结构就是由这三部分组成。

而且每条语句均由分号隔开。

/*声明部分,以declare开头*/DECLARE--declare statement/*执行部分,以begin开头,以end结束*/BEGIN--execute statement/*异常处理部分,以exception开始*/EXCEPTIONWHEN exceptioncase THEN--Exception handleEND;例子:/*声明部分,以declare开头*/DECLAREv_job NUMBER(10);/*执行部分,以begin开头*/BEGINDELETE FROM employee;INSERT INTO employee(depno, job)V ALUES (20, 30);SELECT jobINTO v_jobFROM employeeWHERE depno = 20;dbms_output.PUT_LINE(v_job);/*异常处理部分,以exception开始*/EXCEPTIONWHEN no_data_found THENdbms_output.PUT_LINE('No data.');END;执行结果:1.2、数据类型PL/SQL主要用于数据库编程,所以其所有数据类型跟oracle数据库里的字段类型是一一对应的,大体分为数字型、布尔型、字符型和日期型。

1.3、控制结构PL/SQL程序段中有三种程序结构:条件结构、循环结构和顺序结构。

a)、条件结构IF condition1 THENstatement1ELSEIF conditon2 THENstatement2ELSEstatementelseEND IF;b)、循环结构三种循环结构:简单循环(也称作无限循环):LOOPLoopstatementEND LOOP;WHILE 循环:WHILE condition LOOPloopstatementEND LOOP;数字FOR循环:FOR variable IN low_bound . . upper_boundLOOPloopstatementEND LOOP;通常,如果你总是希望循环主体执行至少一次,那么你就应当使用一个简单循环。

PLSQL语法以及程序编写介绍

PLSQL语法以及程序编写介绍

PLSQL语法以及程序编写介绍
PL/SQL语法介绍
PL/SQL是一种基于Oracle数据库开发的专用程序设计语言。

它是一种非常强大的程序开发语言,可以对SQL语句进行封装和定义,可以从有限的程序开发语言创建功能强大的程序,可以完成一些特殊的任务,可以为Oracle数据库应用程序提供性能改进和维护。

PL/SQL语法由三个主要部分组成:名称、控制结构和声明。

PL/SQL语句可以是SQL语句(简单SQL或复杂SQL)、存储过程(简单或复杂)等。

1.名称:
PL/SQL的名称包括数据库名称、用户名、表名、字段名、变量名、存储过程名、触发器名、索引名、约束名以及函数名等。

2.控制结构:
PL/SQL控制结构由if、if…else、case、loop、exit、for loop等构成,它们可以按照设定的条件执行、跳转、变化等分支控制。

它们根据程序的要求定义和执行在多次执行情况下执行的代码。

PL/SQL声明包括变量声明、常量声明、异常声明以及游标声明等。

变量声明用于存储和传递数据,而常量声明可以用作常数,比如文本、数字以及数据类型。

异常声明用于捕获和处理在特定情况下产生的异常,而游标声明可以用来识别和访问数据库中的特定记录。

PL/SQL程序编写时,应该按照以下步骤进行:
1、设计程序
在开始编写之前。

oracle_PLSQL_语法详细手册剖析

oracle_PLSQL_语法详细手册剖析

SQL PL/SQL语法手册目录第一部分 SQL语法部分 ................................................................................................... 错误!未定义书签。

一、CREATE TABLE语句 ................................................................................ 错误!未定义书签。

二、CREATE SEQUENCE语句 ........................................................................... 错误!未定义书签。

三、CREATE VIEW语句................................................................................... 错误!未定义书签。

四、INSERT语句:........................................................................................... 错误!未定义书签。

五、UPDATE语句:........................................................................................... 错误!未定义书签。

六、DELETE语句:........................................................................................... 错误!未定义书签。

七、TRUNCATE语句:....................................................................................... 错误!未定义书签。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PLSQL语法介绍(有例子带注释)关键字: oracle/plsql/游标/存储过程/触发器--最简单的语句块set serveroutput on; //用于输出显示begindbms_output.put_line('HeloWorld');end;--一个简单的PL/SQL语句块declare //声明变量,必须 v_ 开头v_name varchar2(20);beginv_name := 'myname'; //变量的赋值格式dbms_output.put_line(v_name);end;--语句块的组成declarev_num number := 0;beginv_num := 2/v_num;dbms_output.put_line(v_num);exception //如果没有这部分,当出现异常的时候,就执行过不去when others thendbms_output.put_line('error');end;--变量声明的规则1): 变量名不能够使用保留字,如from、select等2): 第一个字符必须是字母3): 变量名最多包含30个字符4): 不要与数据库的表或者列同名5): 每一行只能声明一个变量--常用变量类型1): binary_integer: 整数,主要用来计数而不是用来表示字段类型2): number: 数字类型3): char: 定长字符串4): varchar2: 变长字符串5): date: 日期6): long: 长字符串,最长2GB7): boolean: 布尔类型,可以取值为 true、false和null--变量声明,可以使用 %type 属性declarev_empno number(4);v_empno2 emp.empno%type;//表示该变量的类型和emp表中的empno字段保持一致。

v_empno3 v_empno2%type;begindbms_output.put_line('Test');--Table变量类型 //类似于java中的数组declaretype type_table_emp_empno is table of emp.empno%type index by binary_integer; //声明一个类型v_empnos type_table_emp_empno;beginv_empnos(0) := 100;v_empnos(2) := 200;v_empnos(-1):= 300;dbms_output.put_line(v_empnos(-1));end;--Record变量类型 //类似于java中的类,可以表示一整条记录declaretype type_record_dept is record(deptno dept.deptno%type,dname dept.dname%type,loc dept.loc%type);v_temp type_record_dept;beginv_temp.deptno := 50;v_temp.dname := 'aaa';v_temp.loc := 'bj';dbms_output.put_line(v_temp.deptno || '' || v_temp.dname); end;不过当表增加了一个字段之后它就不管用了,可以选用下面的这种: %rowtype --使用%rowtype声明Record类型变量declarev_temp dept%rowtype;beginv_temp.deptno := 50;v_temp.dname := 'aaa';v_temp.loc := 'bj';dbms_output.put_line(v_temp.deptno || '' || v_temp.dname);--SQL语句的运用1:declarev_ename emp.ename%type;v_sal emp.sal%type;beginselect ename,sal into v_ename,v_sal from emp where empno = 7369;//必须返回记录,并且只能返回一条dbms_output.put_line(v_ename || '' || v_sal);end;2:declarev_emp emp%rowtype;beginselect * into v_emp from emp where empno = 7396;dbms_output.put_line(v_emp.ename);end;3:declarev_deptno dept.deptno%type := 50;v_dname dept.dname%type := 'aaa';v_loc dept.loc%type := 'bj';begininsert into dept2 values (v_deptno,v_dname,v_loc); //insert、delete、update和sql是一样的,只是可以用变量commit;end;4:declarev_deptno emp2.deptno%type := 10;v_count number;beginupdate emp2 set sal = sal/2 where deptno = v_deptno;dbms_output.put_line(sql%rowcount || '条记录被影响');commit;end;sql%rowcount 表示:刚执行的最后一句sql影响到了多少条记录--执行DDL语句beginexecute immediate 'create table T (nnn varchar2(20) default ''aaa'')';end;--if语句--取出7369的薪水,如果<1200,则输出'low',如果<2000则输出'middle',否则'high'declarev_sal emp.sal%type;beginselect sal into v_sal from emp where empno = '7369'; if(v_sal < 1200) thendbms_output.put_line('low');elsif(v_sal < 2000) thendbms_output.put_line('middle');elsedbms_output.put_line('high');end if;end;--循环(1):相当于 do .. while 循环declarei binary_integer := 1;beginloopdbms_output.put_line(i);i := i + 1;exit when (i >= 11); //循环结束的条件end loop;end;(2):while循环declarej binary_integer := 1;beginwhile j < 11 loopdbms_output.put_line(j);j := j + 1;end loop;end;(3):for循环beginfor k in 1..10 loopdbms_output.put_line(k);end loop;for k in reverse 1..10 loop //表示 k 的值从 10 到 1 dbms_output.put_line(k);end loop;end;--错误处理 (too_many_rows、no_data_found 等等)declarev_temp number(4);beginselect empno into v_temp from emp where empno = 10; exceptionwhen too_many_rows thendbms_output.put_line('太多记录了');when no_data_found thendbms_output.put_line('没数据');when others thendbms_output.put_line('error');end;--将错误信息存储到一张日志表中(1):create table errorlog(id number primary key,errcode number,errmsg varchar2(1024),errdate date);(2):create sequence seq_errorlog_id start with 1 increment by 1;(3):declarev_deptno dept.deptno%type := 10;v_errcode number;v_errmsg varchar2(1024);begindelete from dept where deptno = v_deptno;commit;exceptionwhen others thenrollback;v_errcode := SQLCODE; //是关键字,错误代码v_errmsg := SQLERRM; //是关键字,错误信息insert into errorlogvalues(seq_errorlog_id.nextval,v_errcode,v_errmsg,sysdate); commit;end;--游标1:用游标取一条记录cursor c is //声明一个游标,这时候不会真正执行后面的查询语句,要等到打开游标的时候才执行select * from emp;v_emp c%rowtype;beginopen c;fetch c into v_emp;dbms_output.put_line(v_emp.ename);close c;end;2:结合循环取出多条记录(1):do..while循环declarecursor c isselect * from emp;v_emp c%rowtype;beginopen c;loopfetch c into v_emp;exit when (c%notfound); //当最近一次 fetch 没有返回记录dbms_output.put_line(v_emp.ename);end loop;close c;end;(2):while循环declarecursor c isselect * from emp;v_emp emp%rowtype;beginopen c;fetch c into v_emp;while (c%found) loopdbms_output.put_line(v_emp.ename);fetch c into v_emp;end loop;close c;end;(3):for循环declarecursor c isselect * from emp;for v_emp in c loop //for循环会自动打开和关闭游标,还会自动fetch..intodbms_output.put_line(v_emp.ename);end loop;end;--带参数的游标declarecursor c(v_deptno emp.deptno%type,v_job emp.job%type)isselect ename,sal from emp where deptno = v_deptno and job = v_job;beginfor v_temp in c (30,'clerk') loopdbms_output.put_line(v_temp.ename);end loop;end;--可更新的游标declarecursor cisselect * from emp2 for update;beginfor v_temp in c loopif(v_temp.sal < 2000) thenupdate emp2 set sal = sal * 2 where current of c;elsif(v_temp.sal = 5000) thendelete from emp2 where current of c;end if;end loop;commit;end;--存储过程存储过程:带有名字的PL/SQL的程序块,没有返回值create or replace procedure pis //用它代替了 declarecursor c isselect * from emp2 for update;beginfor v_emp in c loopif(v_emp.deptno = 10) thenupdate emp2 set sal = sal + 10 where current of c; elsif(v_emp.deptno = 20) thenupdate emp2 set sal = sal + 20 where current of c;elseupdate emp2 set sal = sal + 50 where current of c; end if;end loop;commit;end;上面的程序只是定义了一个存储过程,并没有真正执行。

相关文档
最新文档