在sql窗口执行一下:
a.
begin
pro_name();
end;
b.
exec pro_name();
c. 在java代码中调用,没有返回值
{CALL pro_name(param) } //有参数时的调用
d. 在plsql工具右键运行
CREATE OR REPLACE PROCEDURE HELLO
AS //AS 后面是说明部分比如声明变量 AS 也可以是 IS 但不可以省略
begin // 这里面是要写的 程序
dbms_output.put_line("hello world");
end; //end结束 也可以加上存储过程名称 end HELLO;
CREATE OR REPLACE PROCEDURE HELLO (param in number)
// (param 参数 in指明是输入参数(这里必须直面输入还是输出 in/out ) number是参数类型)
AS
newname tablename.name%type; //指明newname 类型和tablename表的name类型一致
begin
select name into newname from tablename where name = param; //将查询的结果赋值到newname中
update tablename set name='张三' where name = param;
end;
CREATE OR REPLACE PROCEDURE HELLO (param in number)
// (param 参数 in/out指输入输出参数(不写默认为in ) number是参数类型)
AS
newname tablename.name%type; //指明newname 类型和tablename表的name类型一致
begin // 这里面是要写的 程序
select name into newname from tablename where name = param;
update tablename set name='张三' where name = param;
COMMIT; //提交事务
EXCEPTION WHEN OTHERS THEN ROLLBACK; //报错时会回滚事务
DBMS_OUTPUT.PUT_LINE('没有成功执行TOLHJC_FEEDBACK');
COMMIT;
end;
在调用存储过程时,h就是返回的值
输出参数的变量 varchar2不能定义长度
游标就是一个结果集合的定义,类似于list;
游标包含:隐式游标 :适用返回 单行的数据
显示游标 :适用返回 多行的数据
有声明的游标,都是显示游标。
CREATE OR REPLACE PROCEDURE HELLO IS
cursor CURSORNAME is SELECT * FROM TABLENAME; --声明游标指定结果集
rel TABLENAME%rowtype ; --声明变量用于接收游标中的值
begin
open CURSORNAME ;--打开游标
IF CURSORNAME%ISOPEN THEN --游标是否开启
loop --开始遍历
fetch CURSORNAME into rel; --提取游标 赋值给记录类型变量
exit when CURSORNAME %notfound; --提取不到退出循环
DELETE FROM TABLENAMET WHERE id =rel.id ; //遍历业务逻辑
end loop;--结束循环
END IF;
close CURSORNAME ; --关闭游标
COMMIT; //业务执行完 提交事务 看情况是否需要写这个
end;