procedure
定义:
create or replace procedure 名称
(param1 in number, param2 out varchar2)
is
begin
...程序块
end
/
create or replace procedure getApple
(useCode in number, apple out number)
is
begin
select apple into apple from t_user where user_code=userCode;
end;
/
var number userCode;--声明变量
exec :userCode:=121;--变量赋值
exec getApple(:userCode);//调用procedure
多个参数只对某一个赋值:
create or replace procedure addUser
(
useCode in number default user_seq.nextval,
user_name in varchar2 default '小明',
age in number default 20,
user_birth_day in date default sysdate,
apple in number default 3
)
is
begin
select apple into apple from t_user where user_code=userCode;
end;
/
调用:
exec addUser(3,‘小王’,apple=>8);
查看procedure内容:
select text from user_source where name='ADDUSER';
默认procedure的事务与外部一致
自治事务(事务只在procedure内部,与外部无关):
create or replace procedure addApple
(userCode in varchar2, apple in number)
pragma autonomous_transaction
is
begin
update t_user set apple=apple where user_code=userCode;
commit;
end;
/
授权其他用户访问procedure
grant execute on addApple to chuyf;
用户chuyf访问:exec system.addApple(3,3);--作用于用户system的t_user表
create or replace procedure getApple
(userCode in varchar2, apple out number)
authid current_user --授权其他用户访问时,访问的是自己的表
is
begin
select apple into apple from t_user where user_code=userCode;
end;
/
grant execute on getApple to chuyf;
用户chuyf访问:
var number apple;
exec system.addApple(3);--作用于用户chuyf的t_user表
pint;
报错时,使用show err显示详细的错误
select * from session_privs;--查询当前用户的权限
动态sql创建表时,当前用户的create table权限不能是继承于角色
create or replace procedure testCre
is
begin
execute immediate 'create table t_friend{ id number,fre_id number}';
end;
/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统