PL/SQL

PL/SQL

 

简介

q      PL/SQL 过程语言(Procedural Language)结构化查询语言(SQL)结合而成的编程语言

q      PL/SQL 是对 SQL 的扩展

q      支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构

q      可用于创建存储过程、触发器和程序包,给SQL语句的执行添加程序逻辑

q      Oracle 服务器和 Oracle 工具紧密集成,具备可移植性、灵活性和安全性

 

优点

q      支持 SQL,在 PL/SQL 中可以使用

q      数据操纵命令

q      事务控制命令

q      游标控制

q      SQL 函数和 SQL 运算符

q      支持面向对象编程 (OOP)

q      可移植性,可运行在任何操作系统和平台上的Oralce 数据库

q      更佳的性能,PL/SQL 经过编译执行

q      会进行预编译

q      把整个PL/SQL块整体传给ORACLE服务器

q      SQL 紧密集成,简化数据处理。

q      支持所有 SQL 数据类型

q      支持 NULL

q      支持 %TYPE %ROWTYPE 属性类型

q      安全性,可以通过存储过程限制用户对数据的访问

 

 

PL/SQL块是构成PL/SQL程序的基本单元

 

 

[DECLARE                DECLARE

 Declarations]              声明变量/游标/异常

 BEGIN                   BEGIN

 Executable statements       可执行代码

[EXCEPTION              EXCEPTION

 handlers]                  异常处理代码

END;                      END;

 

 

 

 

 

 

BEGIN

  SELECT ename FROM emp WHERE empno = 7788;

END;

 

SQL> ed

SQL> /

 

BEGIN

  SELECT ename FROM emp WHERE empno = 7788;

END;

 

ORA-06550:3,3:

PLS-00428:在此 SELECT 语句中缺少 INTO 子句

DECLARE

  empname emp.ename%type;   

BEGIN

  SELECT ename into empname FROM emp WHERE empno = 7788;

  dbms_output.put_line(empname);

END;

 

用户 . . %type 取得列类型并映射为PL/SQL类型

 

SQL> ed

SQL> /

 

SCOTT

 

PL/SQL procedure successfully completed

 

DECLARE

  empRecord emp%rowtype;

BEGIN

  SELECT * into empRecord FROM emp WHERE empno = 7788;

  dbms_output.put_line(empRecord.ename||' '||empRecord.sal);

END;

 

用户 . %rowtype 行类型变量

 

SQL> ed

SQL> /

 

SCOTT 3000

 

PL/SQL procedure successfully completed

 

DECLARE

  empRecord emp%rowtype;

BEGIN

  SELECT * into empRecord FROM emp;

  dbms_output.put_line(empRecord.ename||' '||empRecord.sal);

  EXCEPTION

  WHEN too_many_rows THEN

  dbms_output.put_line(sqlcode||' '||sqlerrm);

  WHEN others THEN

  dbms_output.put_line('EXCEPTION');

END;

 

SQL> ed

SQL> /

 

-1422 ORA-01422: 实际返回的行数超出请求的行数

 

PL/SQL procedure successfully completed

 

BEGIN

   CREATE TABLE HP(myname varchar2(18));

END;

 

SQL> ed

SQL> /

 

BEGIN

   CREATE TABLE HP(myname varchar2(18));

END;

 

ORA-06550: 3 , 4 :

PLS-00103: 出现符号 "CREATE"在需要下列之一时:

 begin case declare exit

   for goto if loop mod null pragma raise return select update

   while with <an identifier>

   <a double-quoted delimited-identifier> <a bind variable> <<

   close current delete fetch lock insert open rollback

   savepoint set sql execute commit forall merge

   <a single-quoted SQL string> pipe

 

BEGIN

   EXECUTE IMMEDIATE 'CREATE TABLE HP(myname varchar2(18))';

END;

 

SQL> ed

SQL> /

 

PL/SQL procedure successfully completed

 

SQL> desc HP;

Name   Type         Nullable Default Comments

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

MYNAME VARCHAR2(18) Y         

 

DECLARE

  sqlStr varchar(200);

  empRec emp%rowtype;

BEGIN

  sqlStr:='select * into empRec from emp where empno=:no';

  EXECUTE IMMEDIATE sqlStr using 7788;

  dbms_output.put_line(empRec.ename||' '||empRec.empno);

END;

 

SQL> ed

SQL> /

 

DECLARE

  sqlStr varchar(200);

  empRec emp%rowtype;

BEGIN

  sqlStr:='select * into empRec from emp where empno=:no';

  EXECUTE IMMEDIATE sqlStr using 7788;

  dbms_output.put_line(empRec.ename||' '||empRec.empno);

END;

 

ORA-00905: 缺少关键字

ORA-06512: line 7

 

 

 

 

 

DECLARE

  sqlStr varchar(200);

  empRec emp%rowtype;

BEGIN

  sqlStr:='select * from emp where empno=:no';

  EXECUTE IMMEDIATE sqlStr into empRec using 7788;

  dbms_output.put_line(empRec.ename||' '||empRec.empno);

END;

 

SQL> ed

SQL> /

 

SCOTT 7788

 

PL/SQL procedure successfully completed

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值