文档库 最新最全的文档下载
当前位置:文档库 › PLSQL

PLSQL

PLSQL
PLSQL

PL/SQL教程

PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL/SQL程序。

例:给所有人加工资,如果工资大于所有人工资的平均值,则上涨15%,反之,上涨23%。

PL/SQL三大类:匿名块、过程/函数/包、触发器

匿名块:直接在sqlplus环境中编写,并运行,运行完成即失效。

最简单的例子:

DECLARE

str varchar2(100) := 'Hello world!';

num number(5) := 100;

BEGIN

DBMS_OUTPUT.PUT_LINE(str); //打印语句

DBMS_OUTPUT.PUT_LINE(num/0);

EXCEPTION

WHEN ZERO_DIVIDE THEN

DBMS_OUTPUT.PUT_LINE('division by zore');

END;

/

DBMS_OUTPUT:是数据库系统中的内置包,PUT_LINE()是该包的一个函数,以前的学的函数处于全局包中。

PL/SQL的优点

从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL/SQL的情形。PL/SQL 不是一个独立的产品,他是一个整合到ORACLE服务器和ORACLE工具中的技术,可以把PL/SQL看作ORACLE服务器内的一个引擎,sql语句执行者处理单个的sql语句,PL/SQL引擎处理PL/SQL程序块。当PL/SQL程序块在PL/SQL引擎处理时,ORACLE服务器中的SQL语句执行器处理pl/sql程序块中的SQL语句。

PL/SQL语句—》ORACLE服务器—》分解代码—》PL/SQL引擎

--》SQL引擎

DECLARE

num number;

BEGIN

SELECT COUNT(*) INTO num FROM customers;

DBMS_OUTPUT.PUT_LINE('Customers number are:'||num);//在sql语句中用单引号引字符串,用||连接字符、END;

/

PL/SQL的优点如下:

. PL/SQL是一种高性能的基于事务处理的语言,能运行在任何ORACLE环境中,支持所有数据处理命令。通过使用PL/SQL程序单元处理SQL的数据定义和数据控制元素。

. PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型

. PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有很好的可重用性。

. 可以使用ORACLE数据工具管理存储在服务器中的PL/SQL程序的安全性。可以授权或撤销数据库其他用户访问PL/SQL程序的能力。

. PL/SQL代码可以使用任何ASCII文本编辑器编写,所以对任何ORACLE能够运行的操作系统都是非常便利的

. 对于SQL,ORACLE必须在同一时间处理每一条SQL语句,在网络环境下这就意味作每一个独立的调用都必须被oracle服务器处理,这就占用大量的服务器时间,同时导致网络拥挤。而PL/SQL是以整个语句块发给服务器,这就降低了网络拥挤。

PL/SQL块结构

PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,一个PL/SQL 程序包含了一个或多个逻辑块,每个块都可以划分为三个部分。与其他语言相同,变量在使用之前必须声明,PL/SQL提供了独立的专门用于处理异常的部分,下面描述了PL/SQL块的不同部分:

声明部分(Declaration section)

注意:声明部分包含了变量和常量的数据类型和初始值。这个部分是由关键字DECLARE开始,如果不需要声明变量或常量,那么可以忽略这一部分;需要说明的是游标的声明也在这一部分。

执行部分(Executable section)

执行部分是PL/SQL块中的指令部分,由关键字BEGIN开始,所有的可执行语句都放在这一部分,其他的PL/SQL块也可以放在这一部分。

异常处理部分(Exception section)

这一部分是可选的,在这一部分中处理异常或错误,对异常处理的详细讨论我们在后面进行。

PL/SQL块语法

PL/SQL块中的每一条语句都必须以分号结束,SQL语句可以使多行的,但分号表示该语句的结束。一行中可以有多条SQL语句,他们之间以分号分隔。每一个PL/SQL块由BEGIN或DECLARE开始,以END结束。注释由--标示。

练习:定义三个变量分别是长方形v_width, v_height,v_area 高和面积有初始值: 2,6,对v_width求值,并输出(考虑如果高为0的异常). 再改写为函数和过程,再调用测试你的代码。

DECLARE

v_width number;

v_height number := 2;

v_area number := 6;

BEGIN

v_width := v_area /v_height;

DBMS_OUTPUT.PUT_LINE(' v_width:'|| v_width);

END;

/

PL/SQL块的命名和匿名

PL/SQL程序块可以是一个命名的程序块也可以是一个匿名程序块。匿名程序块可以用在服务器端也可以用在客户端。

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

PL/SQL程序块可独立编译并存储在数据库中,任何与数据库相连接的应用程序都可以访问这些存储的PL/SQL程序块。ORACLE提供了四种类型的可存储的程序:

. 函数

. 过程

. 包

. 触发器

函数

函数是命名了的、存储在数据库中的PL/SQL程序块。函数接受零个或多个输入参数,有一个返回值,返回值的数据类型在创建函数时定义。定义函数的语法如下:

CREATE OR REPLACE FUNCTION name [(parameter [IN|OUT|IN OUT] datatype[,parameter,...])] RETURN datatypes (IS|AS)

[local declarations]

BEGIN

execute statements

[EXCEPTION

exception handlers]

END [name]

过程

存储过程是一个PL/SQL程序块,接受零个或多个参数作为输入(INPUT)或输出(OUTPUT)、或既作输入又作输出(INOUT),与函数不同,存储过程没有返回值,存储过程不能由SQL语句直接使用,只能通过EXECUT命令或PL/SQL程序块内部调用,定义存储过程的语法如下:

IN: 必须为过程、函数的IN参数赋初值,只传入,不传出,不能在代码中再赋值。(传值)

OUT: 只传出,不传入,没有原始值(传址)

IN OUT: 既能输入,又能更改其值,并输出。

后两种情况,只允许输入已存在的变量。

包:组织其他数据类型为一体的容器对象,分两部分,规范和包体。规范相当于声明,包体相当于实际代码。

创建包规范的语法:

CREATE OR REPLACE PACKAGE 包名IS

内容声明

END;

内容声明:函数、过程、游标

例:

CREATE OR REPLACE PACKAGE product_package IS

TYPE t_ref_cursor IS REF CURSOR;

FUNCTION get_products_ref_cursor RETURN t_ref_cursor;

PROCEDURE update_product_price( p_product_id IN products.product_id%TYPE);

END product_package;

创建包体

CREATE OR REPLACE PACKAGE BODY 包名IS

包体内容(函数的内容、过程的内容)

END;

例:CREATE OR REPLACE PACKAGE BODY product_package IS

FUNCTION get_products_ref_cursor RETURN t_ref_cursor IS

v_products_ref_cursor t_ref_cursor

BEGIN

OPEN v_products_ref_cursor FOR

SELECT product_id,name,price FROM products;

RETURN v_products_ref_cursor;

END get_products_ref_cursor;

PROCEDURE update_product_price( p_product_id IN products.product_id%TYPE) IS

v_product_count number;

BEGIN

SELECT count(*) INTO v_product_count FROM products WHERE product_id = p_product_id; IF v_product_count = 1 THEN

UPDATE products set price = price*1.1; WHERE product_id = p_product_id;

COMMIT;

END IF;

END update_product_price;

END product_package;

调用过程:

select product_package.get_products_ref_cursor FROM dual;

exec product_package.update_product_price(1);

过程的例子:

CREATE OR REPLACE PROCEDURE Test(v_ height number, v_area number ) IS

v_width number;

BEGIN

v_width := v_area /v_height;

DBMS_OUTPUT.PUT_LINE(' v_width:'|| v_width);

END;

/

CREATE OR REPLACE PROCEDURE Ptest(v_ename IN emp.ename%TYPE) IS

v_empno emp.empno%TYPE;

BEGIN

SELECT empno INTO v_empno FROM emp WHERE ename = v_ename;

v_ename := ‘SOCTT23’;

DBMS_OUTPUT.PUT_LINE('enmpno '||v_empno||' is '||v_ename);

END Ptest;

CREATE OR REPLACE PROCEDURE Ptest2(v_out IN number) IS

BEGIN

DBMS_OUTPUT.PUT_LINE(NVL(v_out,0));

-- v_out := 10;

DBMS_OUTPUT.PUT_LINE(v_out);

END;

如果显示编译错误,可是使用SHOW ERROR显示错误发生的地点和原因

查看存储过程: select * from user_procedures;

删除: DROP PROCEDURE 过程名

无参的PROCEDURE:

CREATE OR REPLACE PROCEDURE Test IS

v_width number;

BEGIN

v_width := 6 /2;

DBMS_OUTPUT.PUT_LINE(' v_width:'|| v_width);

END;

/

函数的例子:要求输入圆的半径,求面积

CREATE OR REPLACE FUNCTION circle_area ( p_radius IN number) RETURN number IS

v_pi number := 3.1415926;

v_area number;

BEGIN

v_area := v_pi* POWER(p_radius,2);

RETURN v_area;

END circle_area;

调用:注意,不能使用exec 函数名的形式!

第一种方式:

SQL> select circle_area(3) from dual;

CIRCLE_AREA(3)

--------------

28.2743334

第二种方式:

SQL> declare

2 v_num number;

3 begin

4 v_num := circle_area(3);

5 dbms_output.put_line(v_num);

6 end;

7 /

28.2743334

PL/SQL块还可以接收用户的输入信息,例如:现在要求用户输入一个雇员编号,之后根据输入的内容进行查询,查询雇员的姓名。

? 用户的输入信息使用“&”完成。

DECLARE

eno NUMBER ;

en VARCHAR2(30) ;

BEGIN -- 输入的信息保存在eno里

eno := &no ; -- 之后根据eno的值,对数据库进行查询操作

SELECT first_name INTO en FROM customers WHERE customer_id=eno ;

DBMS_OUTPUT.put_line('编号为:'||eno||'雇员的姓名为:'||en) ;

EXCEPTION

WHEN no_data_found

THEN DBMS_OUTPUT.put_line('没有此客户') ;

END ;

/

在以上的查询中再进一步:可以根据雇员的编号查出姓名及其领导的姓名和所在的部门,进行显示。

DECLARE eno emp.empno%TYPE ; en emp.ename%TYPE ; mn emp.ename%TYPE ;

dn dept.dname%TYPE ;

dept dept %rowtype ;

BEGIN

-- 输入的信息保存在eno里eno := &no ; -- 之后根据eno的值,对数据库进行查询操作SELECT e.ename,m.ename,d.dname INTO en,mn,dn FROM emp e,dept d,emp m WHERE

e.empno=7369 AND e.mgr=m.empno AND e.deptno=d.deptno ;

DBMS_OUTPUT.put_line('编号为:'||eno||'雇员的姓名为:'||en) ;

DBMS_OUTPUT.put_line('编号为:'||eno||'雇员的上级姓名为:'||mn) ;

DBMS_OUTPUT.put_line('编号为:'||eno||'雇员所在的部门:'||dn) ;

DBMS_OUTPUT.put_line(dept.deptno) ; EXCEPTION WHEN no_data_found THEN

DBMS_OUTPUT.put_line('没有此雇员') ;

END ; /

说明:? emp.empno%TYPE ;:表示以emp表中的empno字段的类型定义变量

? e.ename,m.ename,d.dname INTO en,mn,dn:一次可以同时放进去多个值

dept dept %rowtype ; 表示dept是一行数据,类似于Hibernate的PO

包(package)

包其实就是被组合在一起的相关对象的集合,当包中任何函数或存储过程被调用,包就被加载入内存中,包中的任何函数或存储过程的子程序访问速度将大大加快。

包由两个部分组成:规范和包主体(body),规范描述变量、常量、游标、和子程序,包体完全定义子程序和游标。

触发器(trigger)

触发器与一个表或数据库事件联系在一起的,当一个触发器事件发生时,定义在表上的触发器被触发。变量和常量

变量存放在内存中以获得值,能被PL/SQL块引用。你可以把变量想象成一个可储藏东西的容器,容器内的东西是可以改变的。

声明变量

变量一般都在PL/SQL块的声明部分声明,PL/SQL是一种强壮的类型语言,这就是说在引用变量前必须首先声明,要在执行或异常处理部分使用变量,那么变量必须首先在声明部分进行声明。

声明变量的语法如下:

注意:可以在声明变量的同时给变量强制性的加上NOT NULL约束条件,此时变量在初始化时必须赋值。

给变量赋值

给变量赋值有两种方式:

. 直接给变量赋值

X:=200;

Y:=Y+(X*20);

. 通过SQL SELECT INTO 或FETCH INTO给变量赋值

SELECT SUM(SALARY),SUM(SALARY*0.1)

INTO TOTAL_SALARY,TATAL_COMMISSION

FROM EMPLOYEE

WHERE DEPT=10;

常量

常量与变量相似,但常量的值在程序内部不能改变,常量的值在定义时赋予,,他的声明方式与变量相似,但必须包括关键字CONSTANT。常量和变量都可被定义为SQL和用户定义的数据类型。

这个语句定了一个名叫ZERO_VALUE、数据类型是NUMBER、值为0的常量。

标量(scalar)数据类型

标量(scalar)数据类型没有内部组件,他们大致可分为以下四类:

. number

. character

. date/time

. boolean

表1显示了数字数据类型;表2显示了字符数据类型;表3显示了日期和布尔数据类型。

表1 Scalar Types:Numeric

表2 字符数据类型

表3 DATE和BOOLEAN

LOB数据类型

LOB(大对象,Large object) 数据类型用于存储类似图像,声音这样的大型数据对象,LOB数据对象可以是二进制数据也可以是字符数据,其最大长度不超过4G。LOB数据类型支持任意访问方式,LONG只支持顺序访问方式。LOB存储在一个单独的位置上,同时一个"LOB定位符"(LOB locator)存储在原始的表中,该定位符是一个指向实际数据的指针。在PL/SQL中操作LOB数据对象使用ORACLE提供的包DBMS_LOB.LOB数据类型可分为以下四类:

. BFILE

. BLOB

. CLOB

. NCLOB

操作符

与其他程序设计语言相同,PL/SQL有一系列操作符。操作符分为下面几类:

. 算术操作符

. 关系操作符

. 比较操作符

. 逻辑操作符

算术操作符如表4所示

关系操作符主要用于条件判断语句或用于where子串中,关系操作符检查条件和结果是否为true或false,表5是PL/SQL中的关系操作符

表6 显示的是比较操作符

表7.8显示的是逻辑操作符

执行部分

执行部分包含了所有的语句和表达式,执行部分以关键字BEGIN开始,以关键字EXCEPTION结束,如果EXCEPTION不存在,那么将以关键字END结束。分号分隔每一条语句,使用赋值操作符:=或SELECT INTO或FETCH INTO给每个变量赋值,执行部分的错误将在异常处理部分解决,在执行部分中可以使用另一个PL/SQL程序块,这种程序块被称为嵌套块

所有的SQL数据操作语句都可以用于执行部分,PL/SQL块不能再屏幕上显示SELECT语句的输出。SELECT语句必须包括一个INTO子串或者是游标的一部分,执行部分使用的变量和常量必须首先在声明部分声明,执行部分必须至少包括一条可执行语句,NULL是一条合法的可执行语句,事物控制语句COMMIT和ROLLBACK可以在执行部分使用,数据定义语言(Data Definition language)不能在执行部分中使用,DDL语句与EXECUTE IMMEDIATE一起使用或者是DBMS_SQL调用。

执行一个PL/SQL块

SQL*PLUS中匿名的PL/SQL块的执行是在PL/SQL块后输入/来执行,如下面的例子所示:

命名的程序与匿名程序的执行不同,执行命名的程序块必须使用execute关键字:

create or replace procedure update_commission

(v_dept in number,v_pervent in number default 10) is

begin

update emp

set comm=sal*v_percent

where deptno=v_dept;

end

SQL>/

Procedure created

SQL>execute update_commission(10,15);

PL/SQL procedure successfully completed.

SQL>

如果在另一个命名程序块或匿名程序块中执行这个程序,那么就不需要EXECUTE关进字。

控制结构

控制结构控制PL/SQL程序流程的代码行,PL/SQL支持条件控制和循环控制结构。

语法和用途

IF..THEN

语法:

IF语句判断条件condition是否为TRUE,如果是,则执行THEN后面的语句,如果condition为false 或NULL则跳过THEN到END IF之间的语句,执行END IF后面的语句。

IF..THEN...ELSE

语法:

如果条件condition为TRUE,则执行THEN到ELSE之间的语句,否则执行ELSE到END IF之间的语句。

IF 可以嵌套,可以在IF 或IF ..ELSE语句中使用IF或IF..ELSE语句。

IF..THEN..ELSIF

语法:

如果条件condition1为TRUE则执行statement1,然后执行statement5,否则判断condition2是否为TRUE,若为TRUE则执行statement2,然后执行statement5,对于condition3也是相同的,如果condition1,condition2,condition3都不成立,那么将执行statement4,然后执行statement5。

例:

IF v_count > 0 THEN

v_message := ‘v_count is positive’;

IF v_area >0 THEN

v_message := ‘v_count and v_area are position’;

END IF

ELSIF v_count = 0 THEN

v_message := ‘v_count is zero’;

ELSE

v_message := ‘v_count is negative’; END IF;

CASE语句:

简单CASE表达式:

CASE 表达式

WHEN 表达式THEN 结果;

WHEN 表达式THEN 结果;

。。。

WHEN 表达式THEN 结果;

ELSE 默认表达式值

END

例:

select empno, ename,

case deptno

when 10 then '市场部'

when 20 then '研发部'

when 30 then '行政部'

else '有关部门'

end

from emp

搜索CASE表达式:

CASE

WHEN 条件1 THEN 结果1

WHEN 条件2 THEN 结果2

.。。

ELSE 默认结果

END

例:select empno, ename,

case

when deptno = 10 then '市场部'

when deptno = 20 then '研发部'

when deptno = 30 then '行政部'

else '有关部门'

end

from emp

练习:如果其工资高于3500,则显示高工资,工资大于2000,则显示中等工资,工资小于2000的则认为是低等工资。

Select empno,ename,

Case

WHEN sal>=3500 THEN ‘高工资’

WHEN sal>=2000 THEN ‘中等工资’

WHEN sal<2000 THEN ‘低等工资’

END

FROM emp;

循环控制

循环控制的基本形式是LOOP语句,LOOP和END LOOP之间的语句将无限次的执行。LOOP语句的语法如下:

LOOP

statements;

[EXIT WHEN …判断条件]

END LOOP

LOOP和END LOOP之间的语句无限次的执行显然是不行的,那么在使用LOOP语句时必须使用EXIT 语句,强制循环结束,例如:

此时Y的值是1010.

EXIT WHEN语句将结束循环,如果条件为TRUE,则结束循环。

WHILE..LOOP

WHILE..LOOP有一个条件与循环相联系,如果条件为TRUE,则执行循环体内的语句,如果结果为FALSE,则结束循环。

FOR...LOOP

语法:

LOOP和WHILE循环的循环次数都是不确定的,FOR循环的循环次数是固定的,counter是一个隐式声明的变量,他的初始值是start_range,第二个值是start_range+1,直到end_range,如果start_range等于end _range,那么循环将执行一次。如果使用了REVERSE关键字,那么范围将是一个降序。

变量也可以参与循环内的数据运算

如果要退出for循环可以使用EXIT语句。

练习:使用循环语句,依次输出1到100的累加和.

DECLARE

totalsum number := 0;

BEGIN

FOR v_counter in 1..100 loop

totalsum := totalsum+v_counter;

DBMS_OUTPUT.PUT_LINE('累积'||v_counter||'是:'||totalsum);

end loop;

END;

(不使用)标签

用户可以使用标签使程序获得更好的可读性。程序块或循环都可以被标记。标签的形式是<>。

标记程序块

经典plsql例子

setserveroutput on; --计算两个整数的和与这两个整数的差的商 declare aint:=100; bint:=200; c number; begin c:=(a+b)/(a-a); dbms_output.put_line(c); exception whenzero_divide then dbms_output.put_line('除数不能为零!'); end; / declare Num_sal number; --声明一个数值变量 Var_ename varchar2(20); --声明一个字符串变量 begin select ename,sal into Var_ename,Num_sal from scott.emp where empno=7369; --检索指定的值并保存在变量中 dbms_output.put_line(Var_ename||'的工资是'||Num_sal); --输出变量的值end; / --简单的插入一条语句 create or replace procedure pro1 is begin insert into scott.emp(empno,ename)values(1111,'1111'); end; / exec pro1; select * from scott.emp; --删除一条语句(传参) create procedure pro2(in_empno number) is begin delete from emp where empno=in_empno; end; /

--简单的插入一条语句(传参) create or replace procedure pro3(in_empnonumber,in_ename varchar2) is begin insert into scott.emp(empno,ename)values(in_empno,in_ename); end; / declare --定义变量的格式是变量名称变量的类型 v_enamevarchar2(8); begin select ename into v_ename from emp where empno=&empno; --将查询到的值存入v_ename变量中 --输出v_ename dbms_output.put_line('雇员名是'||v_ename); end; / --将上面的块改成过程 create procedure pro4(v_in_empno number) is v_enamevarchar2(8); begin selectename into v_ename from emp where empno=v_in_empno; dbms_output.put_line('雇员名是'||v_ename); end; / --编写一个过程,实现输入雇员名,新工资可以修改雇员的工资 create procedure pro5(in_ename in varchar2,in_newsal in number) is

PLSQL+Developer工具的使用(非常详细)

PLSQL Developer工具的使用 PLSQL Developer的安装十分简单,先安装PL.SQL.Developer.exe文件,然后安装chinese.exe文件进行汉化。安装成功后在桌面点击PLSQL Developer的快捷方式进入登录页面(如图1)。 图1 输入用户名和口令,选择好要连接的数据库,点击“确定”登录成功(如图2)。 图2 在成功登录后会进入到PLSQL Developer的操作界面(如图3)。

图3 用户可以在左边下拉菜单中选择“我的对象”,然后点击“Table”可以显示出项目所涉 及的数据库中所有表(如图4)。 新建表,点击Table文件夹,然后点击鼠标右键在列表中选择“新建”选项进入到创建

新表的页面(如图5),用户可以根据自己的需要来创建新表,但一定要遵循Oracle规范 信息填写完毕后点击“应用”按钮创建成功。 图5 修改表结构,可以选中要该表后点击鼠标右键在列表中选择“编辑”选项进入到修改表结构的页面(如图6),这里显示的都是该表的结构信息,如要进行修改操作请根据实际情况慎重修改,修改后点击“应用”按钮提交修改内容。 图6 修改表名,可以选中要该表后点击鼠标右键在列表中选择“重新命名”选项进入到重新

命名的页面(如图7),这里需要注意的是表名起的一定要有意义。 图7 查询表结构,可以选中要该表后点击鼠标右键在列表中选择“查看”选项进入到查看表结构的页面(如图8)。 图8 删除表,可以选中要该表后点击鼠标右键在列表中选择“删掉表”选项就可以删除已创

建的表了。 查询表中存储的数据,可以选中要该表后点击鼠标右键在列表中选择“查询数据”选项进入到查询结果页面(如图9),这里显示了所有已录入的数据。 图9 编辑数据,可以选中要该表后点击鼠标右键在列表中选择“编辑数据”选项进入到查询结果页面(如图10),这里显示了所有已录入的数据,用户可以对想要编辑的数据进行操作。 图10 修改数据,用户可以在页面中直接对想要修改的数据进行操作,修改后点击页面中的

plsql常用语句

说明:复制表(只复制结构,源表名:a 新表名:b) SQL: select * into b from a where 1<>1 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) SQL: insert into b(a, b, c) select d,e,f from b; 说明:显示文章、提交人和最后回复时间 SQL: select a.title,https://www.wendangku.net/doc/a819181923.html,ername,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b 说明:外连接查询(表名1:a 表名2:b) SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c 说明:日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5 说明:两张关联表,删除主表中已经在副表中没有的信息 SQL: delete from info where not exists ( select * from infobz where info.infid=infobz.infid ) 说明:-- SQL: SELECT A.NUM, https://www.wendangku.net/doc/a819181923.html,, B.UPD_DATE, B.PREV_UPD_DATE FROM TABLE1, (SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X, (SELECT NUM, UPD_DATE, STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') ¦¦ '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y, WHERE X.NUM = Y.NUM (+) AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B WHERE A.NUM = B.NUM 说明:-- SQL: select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩 说明:从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源) SQL: SELECT https://www.wendangku.net/doc/a819181923.html,erper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear, 说明:四表联查问题: SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... 说明:得到表中最小的未使用的ID号 SQL:

PLSQLDev简介

PL/SQL Developer 5.0 User’s Guide 30 天试用版 November 2002 https://www.wendangku.net/doc/a819181923.html,/plsqldevorder.html

目录 目录2 1.简介 (3) 2.安装和连接数据库 (4) 3.编写PL/SQL程序(EDITOR窗口) (5) 3.1创建PL/SQL程序 (5) 3.2保存PL/SQL程序 (5) 3.3修改PL/SQL程序 (6) 3.4编译PL/SQL程序 (6) 4.调试 PL/SQL程序(TEST 窗口) (7) 5.数据库对象浏览器(TOOLS菜单的 BROWER) (9) 5.1查找、定位、过滤查看数据库对象 (9) 5.2查看数据库对象属性和创建脚本 (9) 6.SQL WINDOW(FILE菜单的NEW---->SQL WINDOW ) (10) https://www.wendangku.net/doc/a819181923.html,MAND WINDOW(FILE菜单的NEW----> COMMAND WINDOW ) (13) S UPPORTED COMMANDS (14) 8.EXPLAIN PLAN WINDOW和调整SQL语句 (16) 9.创建和编辑非PL/SQL程序的数据库对象 (18) 10.相关工具性功能(TOOLS) (19) 10.1P REFERENCES (19) 10.2编译失效对象(C OMPILE I NVALID O BJECTS) (19) 10.3比较用户对象(C OMPARE U SER O BJECTS) (20) 10.4事件监控(E VENT M ONITOR) (21) 10.5监控S ESSIONS (21) 10.6查询构建器(Q UERY B UILDER) (22) 11.模版编辑(TEMPLATES) (23) 12.帮助系统(HELP SYSTEMS) (24) 13.自定义功能(CUSTOMIZATION) (26)

PLSQL应用程序开发

Oracle PL/SQL ProGramming 学习笔记 Author:丁俊 目录 序言-特点介绍 (2) PART1 用PL/SQL设计程序 (4) 第一章plsql在10g中的新特性 (4) 第二章建立和运行plsql程序 (6) 第三章plsql语言基本原理 (9) PART2 PL/SQL应用程序结构 (12) 第四章条件和序列控制 (12) 第五章循环控制 (19) 第六章异常处理 (23) PART3 PL/SQL程序应用 (25) 第七章用数据来工作 (25) 第八章Strings (27) 第九章Numbers (31) 第十章Records (36) 第十一章集合类型 (38)

序言-特点介绍 1-1 pl/sql可以做的工作: 1.用pl/sql的存储过程和数据库触发器实现至关重要的商业规则。 2.在数据库中生成和完全地管理xml文档。 3.web页面与数据库的结合。 4.实现自动化的数据库管理,用pl/sql建立安全级别来管理回滚段。 1-2 pl/sql特点: 从oracle 6开始,模仿Ada语言的实现,Ada语言强调数据抽象,信息隐藏,还有其他现代语言设计中的关键策略。pl/sql做为3GL语言具有面向过程语言的许多重要特性,如: 1.丰富的数据类型,从number到string,从复杂的record到table,以及集合类型等。 2.显示的可读性强的块状结构,可以增强我们维护plsql程序。 3.条件,循环语句,包括if---else,3个loop循环(简单loop,for...loop,while...loop)。 4.完整地异常处理机制。 5.命名的,可重用的代码,如包,函数,过程,触发器,对象类型等。 6.plsql是sql的有力补充,与sql之间的联系紧密,整合性强。 7.plsql是oracle数据库产品的内置语言,不是一个孤立的语言。 8.是一种高性能的语言。 9.pl/sql运行过程 Plsql引擎可以接受应用程序的程序,然后将sql部分和plsql部分分离出来,分别交给sql 引擎和plsql引擎执行,提高执行效率。 10.plsql可以每次发送成组的sql语句到服务器端执行,不像sql每次只能发送一句,减少网络负载量,提高效率,而且在oracle的相关工具中,如oracle form中,plsql也得到增强。 11.总结一句话:plsql有应用程序的特性,是sql的有力补充,具有流程控制,申明和使用变量,plsql能运行在任何具有oracle的环境中。

PLSQL安装及配置

PL\SQL Developer的安装和使用一、软件安装 1、准备安装。 安装文件总共有三个,如下图所示: 2、安装PL\SQL Developer的软件。 双击安装文件plsqldev803.exe文件,进入安装阶段: 点击“确定”。 点击“I Agree”。 选择安装路径,点击“Next”。

选择“Create PL\SQL Developer shortcuts”,“Create shortcut on DeskTop”,点击“Next”。 选择“Template files”,“Keyword files”,点击“Finish”。 进入安装过程,会看到安装的进度条,等到安装完成,点击“Close”。

PL\SQL Developer安装完成。 3、安装中文包 双击打开chinese.exe中文包的安装文件,点击“确定”。 选择安装目录,点击右箭头,进入到下一步操作。 进行选项的设置,保持默认即可,点击绿色的钩,进入到安装过程。

软件安装以后,点击灰色的钩,安装完成。 4、注册软件 第一次使用PL\SQL Developer软件是需要注册的,打开”PLSQL注册码.txt”,将相应的内容填入到对应的注册界面,点击“注册”即可。

二、PL\SQL Developer的使用 (在使用PL\SQL Developer之前要保证oracle的远程连接数据库的配置是正确的。 如果配置正确,继续向下看; 如果oracle的连接远程数据库还没有配置,请跳过这节看后面“三、Oracle Net 配置”。) 1、进入系统。双击PL\SQL Developer图标,出现Oracle登陆界面: 填入正确的用户名和密码,选择好对应的数据库,并选择用户的角色,点击“确定”,即可登录成功,进入如下操作界面: 2、PL\SQL操作。下面就最常用的脚本执行操作进行介绍。 1)新建“SQL窗口”。方式有两种:一种是直接点击“文件”→”新建”→”SQL窗口”;

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

PLSQL语法介绍(有例子带注释) 关键字: oracle/plsql/游标/存储过程/触发器 --最简单的语句块 set serveroutput on; //用于输出显示 begin dbms_output.put_line('HeloWorld'); end; --一个简单的PL/SQL语句块 declare //声明变量,必须 v_ 开头 v_name varchar2(20); begin v_name := 'myname'; //变量的赋值格式 dbms_output.put_line(v_name); end; --语句块的组成 declare v_num number := 0; begin v_num := 2/v_num; dbms_output.put_line(v_num); exception //如果没有这部分,当出现异常的时候,就执行过不去 when others then dbms_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: 长字符串,最长2GB 7): boolean: 布尔类型,可以取值为 true、false和null --变量声明,可以使用 %type 属性 declare v_empno number(4); v_empno2 emp.empno%type;//表示该变量的类型和emp表中的empno字

PLSQL 示例代码

PL/SQL 示例代码 这些PL/SQL 代码示例演示了如何在Oracle 数据库中使用各种PL/SQL 特性。 示例代码— Oracle 数据库10g PL/SQL 示例应用程序— FORALL [2005 年 1 月12 日] Oracle 数据库10g 通过集合中的非连续索引,引入了对FORALL 语法的支持。INDICES OF 子句允许将FORALL 语法用于稀疏集合,而VALUE OF 子句用于指向其他集合的索引集合。该示例显示了如何在PL/SQL 应用程序中使用这些特性。 自述文件下载(ZIP) 正则表达式—用户搜索示例 [2004 年12 月13 日] 本示例演示了如何使用正则表达式API 通过TRIGGER、ROCEDURE、CURSOR 等从数据库中验证、搜索和提取信息。借助用户信息系统的场景,本示例使用各种模式来搜索和提取存储在数据库表中的用户信息(如爱好和兴趣、位置信息等)。 自述文件下载(ZIP) 正则表达式—DNA 示例 [2004 年12 月 1 日] 本示例使用正则表达式API 来分析从SGD 数据库接收到的原始HTTP 流,并且仅提取DNA 序列。该序列存储在本地的表中,并使用正则表达式函数进一步分析它以识别特定的酶切图谱。 自述文件下载(ZIP) 正则表达式—用户验证示例[2004 年9 月28 日] 借助一个典型的用户注册情景,本示例应用程序使用了在Oracle 数据库10g中实现的正则表达式函数来验证用户输入。 自述文件下载(ZIP) 示例代码— Oracle9i数据库版本2 除了依赖于公共模式中的对象(特别是员工表)外,这些示例是完全独立的。这些对象已经安装在预先构建的数据库中。可以通过运行Oracle HOME 目录下的demo/schema 目录中的mksample.sql 在定制的数据库中创建它们。 关联数组(index-by-varchar2 表) 在PL/SQL 程序中使用SQL 的RECORD 绑定 Utl_File:在Oracle9i数据库9.2.0 版中所引入增强功能的概述 示例代码— Oracle9i数据库版本1 除了依赖于公共模式中的对象(特别是员工表)外,这些示例是完全独立的。这些对象已经安装在预先构建的数据库中。可以通过运行Oracle HOME 目录下的demo/schema 目录中的mksample.sql 在定制的数据库中创建它们。 PL/SQL 静态SQL 中的游标重用 在PL/SQL 程序中使用CASE 语句 批量绑定增强 表函数和游标表达式

PLSQL查询语句

一、简单查询 简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 表或视图、以及搜索条件等。 例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。SELECT nickname,email FROM testtable WHERE name='张三' (一) 选择列表 选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 量和全局变量)等构成。 1、选择所有列 例如,下面语句显示testtable表中所有列的数据: SELECT * FROM testtable 2、选择部分列并指定它们的显示次序 查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 例如: SELECT nickname,email FROM testtable 3、更改列标题 在选择列表中,可重新指定列标题。定义格式为: 列标题=列名 列名列标题 如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 标题: SELECT 昵称=nickname,电子邮件=email FROM testtable 4、删除重复行 SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 5、限制返回的行数 使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT 时,说明n是

PLSQL学习简易快速入门

PLSQL学习简易快速入门 课程一 PL/SQL 基本查询与排序 本课重点: 1、写SELECT语句进行数据库查询 2、进行数学运算 3、处理空值 4、使用别名ALIASES 5、连接列 6、在SQL PLUS中编辑缓冲,修改SQL SCRIPTS 7、ORDER BY进行排序输出。 8、使用WHERE 字段。 一、写SQL 命令: 不区分大小写。 SQL 语句用数字分行,在SQL PLUS中被称为缓冲区。 最后以;或 / 结束语句。 也可以用RUN来执行语句 二、例1:SQL> SELECT dept_id, last_name, manager_id FROM s_emp; 2:SQL> SELECT last_name, salary * 12, commission_pct FROM s_emp; 对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。 SQL> SELECT last_name, salary, 12 * (salary + 100) FROM s_emp; 三、列的别名ALIASES: 计算的时候特别有用; 紧跟着列名,或在列名与别名之间加“AS”; 如果别名中含有SPACE,特殊字符,或大小写,要用双引号引起。 例(因字体原因,读者请记住:引号为英文双引号Double Quotation): SQL> SELECT last_name, salary, 12 * (salary + 100) ”Annual Salary” FROM s_emp;

四、连接符号:|| 连接不同的列或连接字符串 使结果成为一个有意义的短语: SQL> SELECT first_name || ’’ || last_name || ’, ’|| title ”Employees” FROM s_emp SQL> select divid ||' '|| divname from pub_t_division_test where superid='001' 效果如下图: 五、管理NULL值: SQL> SELECT last_name, title, salary * NVL(commission_pct,0)/100 COMM FROM s_emp; 此函数使NULL转化为有意义的一个值,相当于替换NULL。 select divid,divname,NVL(addr,0) from pub_t_division_test where superid='001' 效果如下图: 六、SQL PLUS的基本内容,请参考 七、ORDER BY 操作: 与其他SQL92标准数据库相似,排序如: SELECT expr FROM table[ORDER BY {column,expr} [ASC|DESC]]; 从Oracle7 release 7.0.16开始,ORDER BY 可以用别名。 另:通过位置判断排序: SQL> SELECT last_name, salary*12 FROM s_emp ORDER BY 2; select * from pub_t_division_test where superid='001'order by3 这样就避免了再写一次很长的表达式。 另:多列排序: SQL> SELECT last name, dept_id, salary FROM s_emp ORDER BY dept_id, salary DESC; SQL>select * from pub_t_division_test where superid='001' order by 1,3 desc

PLSQL使用详细介绍

PL/SQL Developer使用指南 一、安装 PL/SQL Developer不需要执行安装程序,只要从其他机上copy一个来就可以使用。 二、登录 在使用PL/SQL Developer之前,首先需要在本机上配置数据库客户端(在oracle自带工具Net8Assistant中可配置)。配置完成后,在以下窗口中敲入用户名和密码就可进入PL/SQL Developer了。 进入PL/SQL Developer以后,会见到以下窗口: 在这里,可以对数据库中的任何对象(包括函数、存储过程、包、表、触发器等等)进行编辑、修改、运行等。(要视乎该用户的权限而定)。 如果用户要重新登录另一数据库,则可以按下“”重新输入本地数据库标识和用户及密码重新登录。

三、修改对象或编译存储过程 我们以存储过程为例: 双击菜单项“procedures”,按右键即可选择新建存储过程(new)或是修改存储过程(edit)等等。选择完毕后则用oracle的PL/SQL语句对存储过程进行编辑,在编辑完以后 按下可以对它进行编译,如果编译未通过,会在窗口中出现错误提示(如下图所示), 用户可根据提示进行修改和再次编译。 当完全编译通过后,用户可单击存储过程并按右键,选择“test”(执行存储过程),出现以下窗口:

在执行前,首先按“”进行调试,然后按“”执行该存储过程;如果用户在执行过程 中发生错误异常退出了,PL/SQL Developer会在窗口中显示错误,并提示退出。在发生错误后,用户可以选择在存储过程中添加“DBMS_OUTPUT.put_line(字符串)”语句来进行错 误跟踪或是通过一步步执行存储过程(按)来查看执行过程中数据的变化从而进行纠错。 除了存储过程之外,还可以通过PL/SQL Developer对数据库中的其他对象进行修改和授权,情况和以上存储过程的修改大同小异。 四、SQL语句的执行 如果用户要在oracle中执行sql语句,可以点击工具栏上的“new”()中的“SQL window”,这时会弹出一个sql语句的输入窗口,用户就可以在此窗口中敲入sql语句了。并按“F8”或是“”执行,执行后的结果会在下面显示出来,但默认情况下一次只能显 示一页,可以按“”显示下一页;如果用户需要显示全部,则可以按下“”;而按下 “”则可以输入查询条件。如下面两张图所示:

PLSQL触发器详解-2

Oracle触发器详细介绍 Oracle触发器详细介绍一 触发器 是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。 功能: 1、允许/限制对表的修改 2、自动生成派生列,比如自增字段 3、强制数据一致性 4、提供审计和日志记录 5、防止无效的事务处理 6、启用复杂的业务逻辑 开始 create trigger biufer_employees_department_id before insert or update of department_id on employees referencing old as old_value new as new_value for each row when (new_value.department_id<>80 ) begin :new_https://www.wendangku.net/doc/a819181923.html,mission_pct :=0; end; / 触发器的组成部分: 1、触发器名称 2、触发语句 3、触发器限制 4、触发操作 1、触发器名称 create trigger biufer_employees_department_id 命名习惯: biufer(before insert update for each row) employees 表名 department_id 列名 2、触发语句 比如: 表或视图上的DML语句 DDL语句 数据库关闭或启动,startup shutdown 等等 before insert or update of department_id

on employees referencing old as old_value new as new_value for each row 说明: 1、无论是否规定了department_id ,对employees表进行insert的时候 2、对employees表的department_id列进行update的时候 3、触发器限制 when (new_value.department_id<>80 ) 限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。 其中的new_value是代表更新之后的值。 4、触发操作 是触发器的主体 begin :new_https://www.wendangku.net/doc/a819181923.html,mission_pct :=0; end; 主体很简单,就是将更新后的commission_pct列置为0 触发: insert into employees(employee_id, last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct ) values( 12345,’Chen’,’Donny’, sysdate, 12, ‘donny@https://www.wendangku.net/doc/a819181923.html,’,60,10000,.25); select commission_pct from employees where employee_id=12345; 触发器不会通知用户,便改变了用户的输入值。 触发器类型: 1、语句触发器 2、行触发器 3、INSTEAD OF 触发器 4、系统条件触发器 5、用户事件触发器 注释: before和after:指在事件发生之前或之后激活触发器。 instead of:如果使用此子句,表示可以执行触发器代码来代替导致触发器调用的事件。insert、delete和update:指定构成触发器事件的数据操纵类型,update还可以制定列的列表。 referencing:指定新行(即将更新)和旧行(更新前)的其他名称,默认为new和old。table_or_view_name:指要创建触发器的表或视图的名称。 for each row:指定是否对受影响的每行都执行触发器,即行级触发器,如果不使用此子句,则为语句级触发器。 when:限制执行触发器的条件,该条件可以包括新旧数据值得检查。 declare---end:是一个标准的PL/SQL块。 Oracle触发器详细介绍二--语句触发器 1、语句触发器

PLSQL使用方法

1.1PLSQl远程连接oracle数据库 1.1.1配置tnsnames.ora 路径:X:\XXX\PLSQL Developer 9.0.0.1601\orcl_client\tnsnames.ora tnsnames.ora配置: orcl = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521)) ) (CONNECT_DATA = (SID = orcl) ) ) 其中HOST为主机IP地址,红色字体处 PORT为oracle开放端口号 SERVICE_NAME为连接数据库名字,蓝色字体处 *此配置参数可以配置多个,也就是可以配置多个连接字符串(全局名称) 1.1.2添加连接环境变量 变量名:TNS_ADMIN 变量值:X:\XXX\PLSQL Developer 9.0.0.1601\orcl_client 1.1.3添加ORACLE的语言环境变量: 变量名:NLS_LANG 变量值:AMERICAN_AMERICA.ZHS16GBK(设置ORACLE的语言) 重新连接,即可正常显示中文。 如果想转换为UTF8字符集,可以赋予"NLS_LANG"为"AMERICAN_AMERICA.UTF8",其他编码同上

1.1.4下载并安装PL.SQL.Developer,配置应用: 配置tools->preferences->connection PLSQL 设置 Oracle Home=X:\XXX\PLSQL Developer 9.0.0.1601\orcl_client OCI library=X:\XXX\PLSQL Developer 9.0.0.1601\orcl_client\oci.dll 1.1.5重启plsql 再次打开plsql则会在database中有oracledata选项输入用户名密码就可以登陆。 1.2导入基础数据 1.2.1输入用户名密码登录plsql

PLSQL界面中英文对照

PL/SQL界面中英文对照File:文件 New 新建 Program Window 程序窗口 Blank 空白 Function 函数 Java source Java源代码 Package 包 Package body 主体包 Package specification 包说明 Procedure 过程 Trigger 触发器 Type 类型 Type body 类型主体 Type specification 类型说明 Test Window 测试窗口 SQL Window SQL窗口 Report Window 报告窗口 Command Window 命令窗口 Explain Plan Window 解释计划窗口 Diagram Window 图标窗口 View 视图

Materialized view 物化窗口 Table 表 Sequence 序列 Synonym 同义词 Library 库 Directory 目录 Job 作业 Queue 队列 Queue table 队列表 User 用户 Role 角色 Profile 概要文件 Database link 数据库连接Open 打开 Program File 程序文件 Test Script 测试脚本 SQL Script SQL脚本 Report File 报告文件 Command File 命令文件 Diagram File 图标文件Reopen 重新打开

Save 保存 Save as 另存为 Save all 全部保存 E-mail 电子邮件 Close 关闭 Close All 全部关闭 Print 打印 Print Setup 打印设置 Page Setup 页面设置 New Instance 新建实例 Authorization 授权 Exit 退出 VCS: Open Project 打开工程 Close Projcet 关闭工程 Check Out 签出 Check in 签入 Undo Check Out 撤销签出 Get 获取 Add 添加 Remove 移除 Properties 属性

Oracle_10g_plsql实战笔记

1编写一个存储过程,该过程可以向某表中添加记录 1) 创建一个简单的表 create table mytest(name varchar2(30),passwd varchar2(30)); 2)创建过程: create or replace procedure sp_pro1 is bgin 3)执行部分 insert into mytest values('zhangsan','zhangsan'); 4) 结束 end; 5) / 如何查看错误:show error; 如何调用过程: 1)exec 过程名(参数值1,参数值2……)--调用一次就插入一条记录2)call 过程名(参数值1,参数值2……) select * from mytest;--查看结果 2编写一个存储过程,该过程可以删除表记录 create or replace procedure sp_pro2 is bgin --执行部分 delete from mytest where name = 'zhangsan'; end; 5) / java程序结果 public static void main(String[] args) { int a = 1; try { a++; } catch(Exception e) { //异常处理 }

--打开输出选项 set serveroutput on; --关闭输出选项 set serveroutput off; exec sp_pro3(‘SCOTT’,4890); //娱乐测试 如何在java程序中调用一个存储过程? 在java中建立一个project程序 //演示用例:演示java程序调用oracle的存储过程案例 Try { //1 加载驱动 class.forName(“oracle.jdbc.driver.OracleDriver”); //2 连接 //…… //3 创建CallableStatement ableStatement cs = ct.prepareCall(“{call sp_pro3(?,?)}”); //4给?赋值 cs.setString(1,”SMITH”); cs.setInt(2,1005); //5 执行 cs.execute(); //6 关闭 cs.close(); conn.close(); } 。 游标 A cursor is a name for a specific private SQL area in which information for processing the specific statement is kept

plsql使用技巧详解

plsql使用技巧详解 1.记住登陆密码 为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码;设置方法: PL/SQL Developer 7.1.2 ->tools->Preferences->Oracle->Logon History ,“Store history”是默认勾选的,勾上“Store with password”即可,重新登录在输入一次密码则记住了; 2.登录后默认自动选中My Objects 默认情况下,PLSQL Developer登录后,Brower里会选择All objects,如果你登录的用户是dba,要展开tables 目录,正常情况都需要Wait几秒钟,而选择My Objects后响应速率则是以毫秒计算的。 设置方法: Tools菜单 --> Brower Filters,会打开Brower Folders的定单窗口,把“My Objects”设为默认即可。 Tools菜单--Brower Folders,中把你经常点的几个目录(比如:Tables Views Seq Functions Procedures)移得靠上一点,并加上颜色区分,这样你的平均寻表时间会大大缩短。 3.类SQL PLUS窗口 File->New ->Command Window 这个类似于oracle的客户端工具sql plus,但用比它好用多了; 4.关键字自动大写 Tools->Preferences->Editor,将Keyword case选择Uppercase。这样在窗口中输入sql语句时,关键字会自动大写,而其它都是小写。这样阅读代码比较容易,且保持良好得编码风格,同理,在 Tools->Preferences->Code Assistant里可以设置数据库对象的大写、小写,首字母大写等。 5.查看执行计划 选中需要分析的SQL语句,然后点击工具栏的Explain plan按钮(即执行计划),或者直接按F5;这个主要用于分析SQL语句执行效率,分析表的结构,便于为sql调优提供直观依据。 6.使用自定义快捷键 PL/SQL Developer也可以像其他IDE那样使用自定义快捷键提高编写代码效率,节省时间。 如我们平时在sql窗口中使用最频繁的 select * from 我们就可以设置一个快捷键来简化select * from的输入。 1)。建立一个文本文件shortcuts.txt,并写入如下内容: s = SELECT * FROM sc = SELECT count(*) FROM 复制代码另存到PL/SQL Developer的安装路径下的~/PlugIns目录下 2)。Tools-->Preferences-->User Interface-->Editor-->AutoReplace,选中Enable复选框,然后浏览文件选中之前创建的shortcuts.txt,点击Apply 3)。重启PL/SQL Developer,在sql窗口中输入s+空格,sc+空格做测试 7.执行单条SQL语句 PL/SQL Developer 7.1.2 -->tools->Preferences-->Window types ,勾上“AutoSelect Statement”。在使用 PL/SQL Developer的SQL Window时,按F8键,PL/SQL Developer默认是执行该窗口的所有SQL语句,需要设置为鼠标所在的那条SQL语句,即执行当前SQL语句。 8.PL/SQL Beautifier(PL/SQL 美化器)

相关文档