Oracle存儲過程簡單實例
/*不带任何参数存储过程(输出系统日期)*/
create or replace procedure output_date is
begin
dbms_output.put_line(sysdate);
end output_date;
/*带参数in和out的存储过程*/
create or replace procedure get_username(v_id in number,v_username out varchar2)
as
begin
select username into v_username from tab_user where id = v_id; --变量赋值
exception
when no_data_found then
raise_application_error(-20001,'ID不存在!');
end get_username;
Oracle
存储过程的基本语法
Oracle
存储过程的基本语法
Oracle存儲過程基本語法
1. 基本结构
<pre name="code" class="html">CREATE OR REPLACE PROCEDURE 存储过程名字 (
参数1 IN NUMBER,
参数2 IN NUMBER
) AS
变量1 INTEGER :=0;
变量2 DATE; BEGIN
END 存储过程名字
2. SELECT INTO STATEMENT 将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条 记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND) 例子:
BEGIN
SELECT col1,col2 into 变量1,变量2
FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
3、IF判斷
IF V_TEST=1 THEN
BEGIN
do someing
END;
END IF;
4、WHILE循環
WHILE V_TEST=1 LOOP
BEGIN
XXX
END;
END LOOP;
5、變量賦值
V_TEST := 123;
6、用for in 使用cursor光標
……
IS
CURSOR cur is select * from xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名 1+cur_result 列名2
END;
END LOOP;
END
7、带参数的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=CID;
OPEN C_USER(變量);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;
8、用pl/sql developer debug
连接数据库后建立一个Test WINDOW
在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试
9、PL/SQL中執行存儲過程
在sql*plus中:
declare
--必要的變量聲明
begin
execute yourprocudure(parameter1,parameter2,......);
end
在SQL/PLUS中调用存储过程,显示结果:
SQL>set serveoutput on --打开输出
SQL>var info1 number; --输出1
SQL>var info2 number; --输出2
SQL>declare
var1 varchar2(20); --输入1
var2 varchar2(20); --输入2
var3 varchar2(20); --输入2
BEGIN
pro(var1,var2,var3,:info1,:info2);
END;
SQL>print info1;
SQL>print info2;
注:在EXECUTE IMMEDIATE STR语句是SQLPLUS中动态执行语句,它在执行中会自动提交,类似于DP中FORMS_DDL语句,在此语句中str是不能换行的,只能通过连接字符"||",或着在在换行时加上"-"连接字符。