第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)

oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)

时间:2023-11-25 12:53:28

相关推荐

oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)

在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的。

使用SELECT语句从数据库中选取数据时,只能返回一行数据。

使用COMMIT, ROLLBACK, 和SAVEPOINT语句控制事务。

使用隐式游标(implicit cursors)测定DML语句的执行结果。

DDL语句只能通过内置的DBMS_SQL包来使用。

在PL/SQL中的SELECT语句

SELECT select_list

INTO {variable_name[, variable_name]...

| record_name}

FROM table

WHERE condition;

必须使用INTO子句

例子

DECLARE

v_deptno NUMBER(2);

v_loc VARCHAR2(15);

BEGIN

SELECT deptno, loc (select检索出列变量的值 赋给 相应的变量)

INTO v_deptno, v_loc

FROM dept

WHERE dname = 'SALES'; ...

END;

存储数据检索结果

例子

DECLARE

v_empRecord emp%ROWTYPE; (行变量)

BEGIN

-- 从emp表中检索一条记录并存储到v_empRecord记录变量中。(一条记录也就是数据库表中的一行记录)

SELECT *

INTO v_empRecord

FROM emp

WHERE empno = 7369;

dbms_output.put_line(v_empRecord.empno||v_empRecord.ename||v_empRecord.sal);

END;

存储数据检索结果

例子

DECLARE

v_deptName dept.dname%TYPE;

v_deptNo dept.deptno%TYPE;

BEGIN

-- 从dept中检索一条记录(具有两个字段)存储到v_deptNo和v_deptName变量中。

SELECT deptno, dname

INTO v_deptNo, v_deptName

FROM dept

WHERE deptno = 20;

dbms_output.put_line(v_deptNo||v_deptName);

END;

返回指定部门的所有员工的工资总额

DECLARE

v_sum_sal emp.sal%TYPE;

v_deptno NUMBER NOT NULL := 10;

BEGIN

SELECT SUM(sal) -- group function

INTO v_sum_sal

FROM emp

WHERE deptno = v_deptno;

dbms_output.put_line(v_sum_sal);

END;

使用DML命令改变数据库表的记录:

INSERT

UPDATE

DELETE

为所有在emp表中的Analysts员工增加工资

DECLARE

v_sal_increase emp.sal%TYPE := 2000;

BEGIN

UPDATE emp

SET sal = sal + v_sal_increase

WHERE job = 'ANALYST';

END;

更新dept表中的数据

v_deptno dept.deptno%TYPE:=&no;

v_dname dept.dname%TYPE :='&name';

BEGIN

UPDATE scott.dept SET dname=v_dname

WHERE deptno=v_deptno;

END;

从emp表中删除10号部门下的所有员工

DECLARE

v_deptno emp.deptno%TYPE := 10;

BEGIN

DELETE FROM emp

WHERE deptno = v_deptno;

END;

COMMIT和ROLLBACK语句

一个事务是从第一条DML语句开始直到COMMIT或ROLLBACK语句结束。

使用COMMIT和ROLLBACK语句结束一个事务。

DECLARE

v_sal NUMBER(10,2) :=&salary;

v_ename VARCHAR2(20):='&name';

BEGIN

UPDATE emp SET sal=v_sal

WHERE ename=v_ename;

COMMIT;

EXCEPTION(发生异常,就回滚)

WHEN others THEN

ROLLBACK;

END;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。