当前位置:首页 » 存储配置 » oracle存储过程给变量赋值

oracle存储过程给变量赋值

发布时间: 2023-06-10 18:34:56

⑴ Oracle 如何给存储过程赋值

如果存储过程的名字是issuccess
可以这样定义入参
issuccess(PRM_I
in
varchar2).
调用的时候就可以:
issuccess('123456789');
作为传入的值来处理。
如果需要把存储过程中处理的结果返回出来,那么可以定以OUT
参数:
issuccess(PRM_I
in
varchar2,PRM_O
OUT
VARCHAR).
调用之前准备一个变量
VS_OUT
varchar2(20);
调用时:
issuccess('123456789',VS_OUT).
过程里面修改PRM_O的值,过程执行完成后可以通过VS_OUT捕获。

⑵ 求教oracle存储过程的赋值和更新

--本存储过程为简化版,格式、变量的定义等许多情况需要自行添加
--本存储过程假设phone与name一一对应,即不会出现一个phone对应多个name的情况
--如果实际情况不为一一对应,请在自行完善存储过程
--①首先查出表1中phone不为空并且name 为空的记录,并建立游标
cursor cur_row is
select phone from table1 where table1.name is null and phone is not null;
--②遍历游标cur_row的phone字段,去表2中查询出name并更新到表1中
for v_num in cur_row loop

--下面的v_name应该先声明,这里直接用了,类似情况不再做说明
--下面的select into 未做异常处理,请自行完善,类似情况不再做说明
select name into v_name from table2 where table2.phone=v_num.phone;
update table1 set table1.name = v_name where table1.phone = v_num.phone;
end loop;
--统一提交
commit;
--完成
--纯手打,可能有错别字,请自行修正

⑶ ORACLE存储过程varchar2变量赋值问题。

看到错误提示的地方,你应该是想执行一个动态sql(在open语句中str是一个变量, 但是想把str用成SQL语句的in字句的部分),这明显是不对的(如果要用动态SQL,则是另外的写法)。

可以open的查询语句,直接在查询语句中根据ORGCODE的值用case when构造查询的条件。例如:

where(casewhenORGCODE='SH'andPORGCODEin('A','B','C')then'Y'
whenORGCODE='A'andPORGCODEin('A')then'Y'
...
else'N'end)='Y'

⑷ Oracle 如何给存储过程赋值

如果存储过程的名字是issuccess
可以这样定义入参 issuccess(PRM_I in varchar2).
调用的时候就可以:
issuccess('123456789');
作为传入的值来处理。
如果需要把存储过程中处理的结果返回出来,那么可以定以OUT 参数:
issuccess(PRM_I in varchar2,PRM_O OUT VARCHAR).
调用之前准备一个变量
VS_OUT varchar2(20);
调用时:
issuccess('123456789',VS_OUT).
过程里面修改PRM_O的值,过程执行完成后可以通过VS_OUT捕获。

⑸ oracle 存储过程赋值的方法

标量赋值:
格式:名字 类型 := 赋值内容
例子:aa varchar(5):= 'ss';

总共我知道的有4中:1.标量,2.显示变量,3声明记录,4索引表

⑹ 大家帮忙看看Oracle存储过程怎样给变量赋值

在pl/sql developer中,选中你要执行的存储过程,点击右键选择“测试”,在下面的参数中输入你的“123456789”,点击工具栏的“执行”,执行完毕后,如果有返回值就点击cursor,可以看到结果了。

⑺ oracle date 在存储过程中赋值

v_begintime和v_endtime都赋值为sysdate,相减自然为0
至于v_begintime的值变为了21-JAN-15,失去了秒,这是显示的格式问题。你可以用to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')来查看秒

⑻ oracle的存储过程,为什么不允许直接在变量里赋值

oracle的存储过程,不允许直接在变量里赋值是因为oracle存储过程定义时并不会初始化变量的内存大小,只有使用的时候才会去分配。
oracle的存储过程的基本语法:
一:存储过程分部解析:
1 CREATE OR REPLACE PROCEDURE 存储过程名
2 IS
3 BEGIN
4 NULL;
5 END;

行1:
CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;
行2:
IS关键词表明后面将跟随一个PL/SQL体。
行3:
BEGIN关键词表明PL/SQL体的开始。
行4:
NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句;
行5:
END关键词表明PL/SQL体的结束
二:存储过程创建语法:
create or replace procere 存储过程名(param1 in type,param2 out type)
as
变量1 类型(值范围); --vs_msg VARCHAR2(4000);
变量2 类型(值范围);
Begin
//这里才可以给变量赋值
Select count(*) into 变量1 from 表A where列名=param1;

If (判断条件) then
Select 列名 into 变量2 from 表A where列名=param1;
Dbms_output。Put_line(‘打印信息’);
Elsif (判断条件) then
Dbms_output。Put_line(‘打印信息’);
Else
Raise 异常名(NO_DATA_FOUND);
End if;
Exception
When others then
Rollback;
End;

⑼ oracle存储过程基本语法

一:存储过程

创建存储过程,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系统权限   

删除存储过程,是过程的创建者或者拥有DROP ANY PROCEDURE系统权限 

修改存储过程,则只能是过程的创建者或者拥有ALTER ANY PROCEDURE系统权限的人

执行(或调用)存储过程,是过程的创建者或是拥有EXECUTE ANY PROCEDURE系统权限的人或是被拥有者授予EXECUTE权限的人

1:语法

 1)创建

CREATE[ORREPLACE]PROCEDURE存储过程名[(参数[IN|OUT|INOUT] 数据类型...)]

{AS|IS}

[说明部分]

BEGIN

可执行部分

[EXCEPTION

错误处理部分]

END[过程名];

 说明:

   OR REPLACE 表示如果存在就覆盖存储过程

   参数有三种形式:IN、OUT和IN OUT。则默认为IN。

  关键字AS也可以写成IS,后跟过程的说明部分,可以在此定义过程的局部变量。

2)删除存储过程:

DROP PROCEDURE 存储过程名;

3)修改存储过程:

      ALTER PROCEDURE 存储过程名 COMPILE; 

4)执行存储过程

      EXECUTE 模式名.存储过程名[(参数...)]; 

     或

       BEGIN 

模式名.存储过程名[(参数...)];

END;

另外:参数可以是变量、常量或表达式

 要其它用户执行存储过程须要给其它用户授权

GRANT EXECUTE ON 存储过程名 TO 用户名

 2:参数说明

IN 定义一个输入参数变量,用于传递参数给存储过程

OUT 定义一个输出参数变量,用于从存储过程获取数据

IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能

 1)参数名 IN 数据类型 DEFAULT 值;

          定义一个输入参数变量,用于传递参数给存储过程。

          可以是常量、有值变量或表达式

          DEFAULT 关键字为可选项,用来设定参数的默认值。如果在调用存储过程时不指明参数,则参数变量取默认值

          在存储过程中,输入变量接收主程序传递的值,但不能对其进行赋值。

2)参数名 OUT 数据类型;

          定义一个输出参数变量,用于从存储过程获取数据,即变量从存储过程中返回值给主程序。

          在调用存储过程时,主程序的实际参数只能是一个变量,而不能是常量或表达式。

          在存储过程中,参数变量只能被赋值而不能将其用于赋值,而且必须给输出变量至少赋值一次。

3)参数名 IN OUT 数据类型 DEFAULT 值; 

          定义一个输入、输出参数变量,兼有以上两者的功能。

          在调用存储过程时,主程序的实际参数只能是一个变量,而不能是常量或表达式。

          DEFAULT 关键字为可选项,用来设定参数的默认值。

          在存储过程中,变量接收主程序传递的值,同时可以参加赋值运算,也可以对其进行赋值。在存储过程中必须给变量至少赋值一次。

补充:如果省略IN、OUT或IN OUT,则默认模式是IN。 

          调用它时参数个数与位置可以不一致,用以下形式调用:

EXECUTE CHANGE_SALARY(P_RAISE=>80,P_EMPNO=>7788);  //=>运算符左侧是参数名,右侧是参数表达式

 二:函数

创建函数,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系统权限

删除函数,需要是函数的创建者或者是拥有DROP ANY PROCEDURE系统权限的人

修改函数,需要是函数的创建者或者拥有ALTER ANY PROCEDURE系统权限的人

执行函数,需要是函数的创建者或拥有EXECUTE ANY PROCEDURE系统权限的人

1:语法

1)创建:

CREATE[ORREPLACE]FUNCTION函数名[(参数[IN] 数据类型...)]

RETURN数据类型

{AS|IS}

[说明部分]

BEGIN

可执行部分

RETURN(表达式)

[EXCEPTION

    错误处理部分]

END[函数名];

 说明:

     参数是可选的,但只能是IN类型(IN关键字可以省略)。

     在定义部分的RETURN 数据类型,用来表示函数的数据类型,也就是返回值的类型,不可省略。

     在可执行部分的RETURN(表达式),用来生成函数的返回值,其表达式的类型应该和定义部分说明的函数返回值的数据类型一致。在函数的执行部分可以有多个RETURN语句,但只有一个RETURN语句会被执行,一旦执行了RETURN语句,则函数结束并返回调用环境。 

2)删除

      DROP FUNCTION 函数名;

3)修改

      ALTER PROCEDURE 函数名 COMPILE;

4)执行

      变量名:=函数名(...) 

三:对存储过程 和 函数的查看(可以通过对数据字典【USER_SOURCE】的访问来查询存储过程或函数的有关信息)

 1:查询某个存储过程序内容

select TEXT from user_source WHERE NAME='存储过程名';

 2:查看数据字殿

DESCRIBE USER_SOURCE ; //命令行中

 3:查看存储过程的参数

DESCRIBE say_hello; //后面是过程名

 4:查看发生编辑错误

SHOW ERRORS ;

 5:查询一个存储过程或函数是否是有效状态(即编译成功)

SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='过程名';//注意大小写

VALID表示该存储过程有效(即通过编译),INVALID表示存储过程无效或需要重新编译。它的状态会改变,这与它依赖外部表(表删除修改等操作)有关系

6:查看存储过程与表的依赖关系

SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='SAY_HELLO';

 说明

NAME为实体名,TYPE为实体类型,REFERENCED_OWNER为涉及到的实体拥有者账户,REFERENCED_NAME为涉及到的实体名,REFERENCED_TYPE 为涉及到的实体类型。

问题:

如果一个用户A被授予执行属于用户B的一个存储过程的权限,在用户B的存储过程中,访问到用户C的表,用户B被授予访问用户C的表的权限,但用户A没有被授予访问用户C表的权限,那么用户A调用用户B的存储过程是失败的还是成功的呢?答案是成功的。

热点内容
畅玩守望先锋最少要什么配置 发布:2025-02-05 23:37:52 浏览:452
云桌面服务器启动不了 发布:2025-02-05 23:29:09 浏览:25
uc缓存视频怎么彻底清理 发布:2025-02-05 23:24:16 浏览:632
家用电脑该怎么样配置 发布:2025-02-05 23:24:13 浏览:337
唐门按键精灵脚本 发布:2025-02-05 23:24:02 浏览:6
博图加密算法 发布:2025-02-05 23:07:48 浏览:548
帧数脚本 发布:2025-02-05 23:06:26 浏览:855
android菜单效果 发布:2025-02-05 23:00:54 浏览:673
怎样把独立存储器放入此电脑 发布:2025-02-05 23:00:21 浏览:89
取消微信设置密码在哪里设置 发布:2025-02-05 22:48:49 浏览:667