您的位置:首页 > 数据库 > Oracle

oracle 方法 函数 游标

2015-08-18 21:35 661 查看
-- 创建函数

create or replace function testfunction(n1 in number,n2 in number)

return num -- 返回类型

as

n3 number;
--临时变量需要返回

begin

-- 执行的过逻辑

return n3;

end;

----------------------------游标

-- 游标for

declare cursor t is select * from xxxx;

BEGIN

FOR r IN t loop

dbms_output.put_line('test');

end loop;

end;

-- 使用游标更新

declare cursor t is select * from xxxx;

BEGIN

FOR r IN t loop

if r.id='1' then

dbms_output.put_line('test');

else

update xx set xx=xx where current of xxx;

end loop;

end;

-- 旧版写法显示游标

declare cursor t is select * from xxxx;

r t%rowtype;

begin

open t;

fetch t into r;

while t%found loop

dbms_output.put_line('xx');

fetch t into r;

end loop;

close cur_emp;

end;

--函数+动态游标 传入一条一个字段的sql,连接符 返回1,2,3

CREATE OR REPLACE

function pjstr

(

tempsql in VARCHAR2,

pjh in VARCHAR2

)

return VARCHAR2

as

TYPE i_cursor_type IS REF CURSOR;--声明动态游标

mycursor i_cursor_type;-- 定义游标类型

tempval VARCHAR2(1000);

returnstr VARCHAR2(100);--返回值

begin

OPEN mycursor FOR tempsql;

loop

fetch mycursor into tempval;

EXIT when mycursor%notfound;

returnstr:=returnstr||tempval||pjh;

end loop;

returnstr:=substr(returnstr,1,length(returnstr)-1);

close mycursor;

return returnstr;

end;

---------------------------------------------------介绍.

1.基本结构

CREATE OR REPLACE PROCEDURE 存储过程名字

(

参数1 IN NUMBER,

参数2 IN NUMBER

) IS

变量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 something

END;

END IF;

4.while 循环

WHILE V_TEST=1 LOOP

BEGIN

XXXX

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=C_ID;

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单步调试

简单实例,通过DBMS_OUTPUT来看结果

CREATE OR REPLACE PROCEDURE bb (lic_para IN VARCHAR2,out_para OUT VARCHAR2)

AS

temp VARCHAR2 (100);

BEGIN

SELECT
lic_no

INTO temp

FROM t_vehicle_info

WHERE lic_no = lic_para;

out_para:=temp;

DBMS_OUTPUT.put_line (out_para);

END bb;

下面是调用:

begin

-- Call the procedure

bb(lic_para => :lic_para,

out_para => :out_para);

end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: