1、PL/SQL 语法相关
-- SQL 语言只是访问,操作数据库的语言,而比并不是程序设计语言,因此不能用于程序开发。 -- PL/SQL 是在标准SQl语言上进行过程性扩展后形成的程序设计语言,是一种Oracle数据库特有的,支持应用开发语言; ------------if-------------- DECLARE address VARCHAR2(10) :='Y1'; BEGIN IF (address ='Y') THEN dbms_output.put_line('yes'); ELSE dbms_output.put_line('no'); END IF; END; -------------case------------ DECLARE ADDRESS NUMBER := 1; BEGIN CASE ADDRESS WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('1'); WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('2'); WHEN 3 THEN DBMS_OUTPUT.PUT_LINE('3'); ELSE DBMS_OUTPUT.PUT_LINE('4'); END CASE; END; ------------LOOP------------- DECLARE NUM NUMBER := 5; BEGIN LOOP IF NUM < 0 THEN EXIT; END IF; dbms_output.put_line('H:'||NUM); NUM := NUM - 1; END LOOP; END; ---------- DECLARE NUM NUMBER := 5; BEGIN LOOP EXIT WHEN NUM < 0; DBMS_OUTPUT.PUT_LINE('k:' || NUM); NUM := NUM - 1; END LOOP; END; ------FOR...IN..LOOP...END------- BEGIN FOR i IN 1..10 LOOP DBMS_OUTPUT.PUT_LINE('L:' || i); END LOOP; END; -------------------------- --%TYPE 定义一个变量,将数据类型与已经定义的数据变量的类型相同, --或与数据库表的某列的数据类型相同 select * FROM chengji; DECLARE NAME1 CHENGJI.NAME%TYPE; SCORE1 CHENGJI.SCORE%TYPE; BEGIN SELECT NAME, SCORE INTO NAME1, SCORE1 FROM CHENGJI WHERE ID = 4; DBMS_OUTPUT.PUT_LINE(NAME1 || '-' || SCORE1); END; --提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致 DECLARE CJ CHENGJI%ROWTYPE; BEGIN SELECT * INTO CJ FROM CHENGJI WHERE ID = 4; DBMS_OUTPUT.PUT_LINE(CJ.NAME || '-' || CJ.SCORE); END;
2、游标使用
1.声明游标
2.打开游标
3.提取游标
4.关闭游标
游标属性
%NOTFOUND -- 是否没找打游标
%FOUND -- 是否找到游标
%ROWCOUNT -- 游标行数
%ISOPEN -- 游标是否打开
-- for 循环游标 DECLARE CURSOR CJ IS SELECT * FROM CHENGJI; -- 定义一个游标变量cj_row ,类型为cj的一行类型 CJ_ROW CJ%ROWTYPE; BEGIN FOR CJ_ROW IN CJ LOOP DBMS_OUTPUT.PUT_LINE(CJ_ROW.NAME || '-' || CJ_ROW.COURSE || '-' || CJ_ROW.SCORE); END LOOP; END; -- Fetch 游标 DECLARE CURSOR CJ IS SELECT NAME, COURSE, SCORE FROM CHENGJI; CJ_ROW CJ%ROWTYPE; BEGIN OPEN CJ; LOOP FETCH CJ INTO CJ_ROW; EXIT WHEN CJ%NOTFOUND;-- 判断是否取到值,没取到值就退出 DBMS_OUTPUT.PUT_LINE(CJ_ROW.NAME || ',' || CJ_ROW.COURSE || ',' || CJ_ROW.SCORE); END LOOP; CLOSE CJ; END;
3、过程
3.1
-- 创建过程 CREATE OR REPLACE PROCEDURE 存储过程名(参数in,参数out) AS -- 变量声明 NAME VARCHAR2(10); age INTEGER ; BEGIN --业务逻辑 END;
3.2
CREATE OR REPLACE PROCEDURE PRO_CHENGJI_ID(NAME1 IN chengji.name%TYPE, ID1 IN chengji.id%TYPE) AS BEGIN UPDATE CHENGJI SET ID = ID1 WHERE NAME = NAME1; COMMIT; END ; --执行过程 call PRO_CHENGJI_ID('王五',4);
3.3
CREATE OR REPLACE PROCEDURE PRO_CHENGJI_ID(NAME1 IN CHENGJI.NAME%TYPE, ID1 IN CHENGJI.ID%TYPE, COURSE1 IN CHENGJI.COURSE%TYPE, SCORE1 OUT CHENGJI.SCORE%TYPE) AS BEGIN SELECT SCORE INTO SCORE1 FROM CHENGJI WHERE NAME = NAME1 AND ID = ID1 AND COURSE = COURSE1; END PRO_CHENGJI_ID; --执行过程 DECLARE score chengji.score%TYPE; BEGIN PRO_CHENGJI_ID('王五',3,'化学',SCORE); dbms_output.put_line(''||score); END;