首页 > 代码库 > oracle入门(6)——PL/SQL常用语法
oracle入门(6)——PL/SQL常用语法
【本文介绍】
本文不是”语法大全“,只是记录下作项目里自己常用的一些语法。方便查询。
【语法】
【输出】 | |
(1)输出语法 | DBMS_OUTPUT.PUT_LINE( ) |
【定义】 | |
(1)定义变量: | ......as变量名 类型(长度)begin...... 例如: |
(2)定义变量 ,类型 依赖其他变量的类型 | 例如: 这样,改了name的类型,returnValue类型也跟着改变。 |
(3)自定义类型(类似C语言的结构体)每次只能拿一条数据,不然会的报错。 | 例如: |
(4)以“表”做为类型。每次只能拿一条数据,不然会的报错。 | 例如: |
(5)以“表”做为类型的数组,数组下标为int型。每次只能拿一条数据,不然会的报错。 | |
(6)以“表”做为类型的数组,数组下表为字符型。每次只能拿一条数据,不然会的报错。 | CREATE OR REPLACE PROCEDURE "userList" ASTYPE user_type_list is table OF"user"%rowtype --索引表类型index by VARCHAR2(20); myUserList user_type_list; BEGIN SELECT * into myUserList(‘one‘) from "user" WHERE "user"."id" = ‘1‘; DBMS_OUTPUT.PUT_LINE(myUserList(‘one‘)."id"); DBMS_OUTPUT.PUT_LINE(myUserList(‘one‘)."name"); DBMS_OUTPUT.PUT_LINE(myUserList.first);END;
|
(7)VARCHAR变长数组 | CREATE OR REPLACE PROCEDURE "userList" AS TYPE user_type_list --数组名is varray(100) OF --长度"user"%rowtype; --类型 myUserList user_type_list := user_type_list(); --定义 BEGIN myUserList.EXTEND; --分配存储空间,相当于C语言里面的malloc SELECT * into myUserList(1) from "user" WHERE "user"."id" = ‘1‘; DBMS_OUTPUT.PUT_LINE(myUserList(1)."id"); DBMS_OUTPUT.PUT_LINE(myUserList(1)."name");END;
|
【赋值】 | |
(1)赋值 | 变量名 := 值 |
(2)查询并赋值 | |
【控制语句】 | |
(1)if语句 | CREATE OR REPLACE PROCEDURE "userList" AS myResult NUMBER(10,4); --变量 BEGIN myResult := SQRT(58+25*3+(19-9)**2);--数值表达式 IF myResult > 10 THEN --if语句 DBMS_OUTPUT.PUT_LINE(‘结果大于10‘); ELSE IF myResult > 15 then -- else if语句 DBMS_OUTPUT.PUT_LINE(‘结果大于15‘); END IF; --结束else if END IF; --结束ifEND;
|
(2)case语句 | CREATE OR REPLACE PROCEDURE "userList" AS myCase VARCHAR2(10) := ‘A‘; --变量 BEGIN CASE myCase WHEN ‘A‘ THEN DBMS_OUTPUT.PUT_LINE(‘A‘); WHEN ‘B‘ THEN DBMS_OUTPUT.PUT_LINE(‘B‘); ELSE DBMS_OUTPUT.PUT_LINE(‘什么也不匹配‘); END CASE;END;
|
(3)循环语句 | CREATE OR REPLACE PROCEDURE "userList" AS myNumber number := 1; --变量 BEGIN LOOP --循环开始的标志 if myNumber < 5 THEN --逻辑部分 DBMS_OUTPUT.PUT_LINE(‘myNumber的值为:‘||myNumber); myNumber := myNumber+1; ELSE EXIT ; --一定要有退出语句 END IF; END LOOP; --结束循环END; 或 CREATE OR REPLACE PROCEDURE "userList" AS myNumber number := 1; --变量 BEGIN LOOP --循环开始的标志 if myNumber < 5 THEN --逻辑部分 DBMS_OUTPUT.PUT_LINE(‘myNumber的值为:‘||myNumber); myNumber := myNumber+1; END IF; EXIT WHEN myNumber >= 5; --eixt when 语句 END LOOP; --结束循环END; 或: CREATE OR REPLACE PROCEDURE "userList" AS myNumber number := 1; --变量 BEGIN FOR inx IN 1..4 --for loop语句 LOOP --循环开始的标志 DBMS_OUTPUT.PUT_LINE(‘myNumber的值为:‘||myNumber); myNumber := myNumber+1; END LOOP; --结束循环END;
|
【异常】 | |
异常处理 | |
注释 | 单行: -- 多行:/* */ |
转义字符 | |
【常用函数】 | |
数值表达式 | CREATE OR REPLACE PROCEDURE "userList" AS myResult NUMBER(10,4); --变量 BEGIN myResult := SQRT(58+25*3+(19-9)**2);--数值表达式 DBMS_OUTPUT.PUT_LINE(myResult);END;
|
字符切割函数 | /**用pipe函数实现字符串分割**/CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);/CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)RETURN ty_str_split PIPELINEDIS j INT := 0; i INT := 1; len INT := 0; len1 INT := 0; str VARCHAR2 (4000);BEGIN len := LENGTH (p_str); len1 := LENGTH (p_delimiter); WHILE j < len LOOP j := INSTR (p_str, p_delimiter, i); IF j = 0 THEN j := len; str := SUBSTR (p_str, i); PIPE ROW (str); IF i >= len THEN EXIT; END IF; ELSE str := SUBSTR (p_str, i, j - i); i := j + len1; PIPE ROW (str); END IF; END LOOP; RETURN;END fn_split;
|
转义字符 | cgar(47) 即代表 : / |
数组长度函数 | len := LENGTH (p_str);
|
产生随机数 | substr(DBMS_RANDOM.VALUE(10,24),1,2)
|
生成日期 | select to_char(sysdate,‘yyyy-mm-dd-hh24-mi-ss‘) into mydate from dual;
|
UUID | select sys_guid() into myUser."id" from dual;
|
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。