【问题标题】:How to pass bind variable as IN OUT parameter in PLSQL procedure如何在 PLSQL 过程中将绑定变量作为 IN OUT 参数传递
【发布时间】:2020-07-11 11:12:48
【问题描述】:

我想使用我的程序 EMP_ID 的第一个参数作为 IN OUT 参数。最初它是 IN 参数,这个过程运行良好,但作为最后一行关注

htp.p('Inserted for Employee-id '||EMP_ID);

我想在匿名块中使用这一行,最重要的是它应该是一个绑定变量,因为我正在创建 REST API,用户将只在其中输入值并将其作为绑定变量在 oracle Apex 中,以下过程在 IN 参数方面运行良好。

create or replace procedure att_time_ins (EMP_ID in  varchar2, ORG_ID in number,V_TIME_STATUS in number) is
  BEGIN
INSERT INTO TIME_ATTENDANCE_POOL
(EMPLOYEE_ID, ATTENDANCE_DATE,TIME_HOURS,TIME_MINUTES,TIME_STATUS,LOCATION_ID,ORG_ID,PREPARED_ON )  
VALUES  
(EMP_ID, to_date(sysdate,'DD/MM/YYYY'),to_char(sysdate,'HH24') ,to_char(sysdate,'MI'),V_TIME_STATUS,null,ORG_ID,
to_date(sysdate,'DD/MM/YYYY') );   
COMMIT;

time_management.create_attendance_sheet(v_org_id => ORG_ID,
                                          v_employee_id => EMP_ID,
                                          target_date =>  to_date(sysdate,'DD/MM/YYYY'));
 htp.p('Inserted for Employee-id '||EMP_ID);



end att_time_ins;

我以这种方式调用我的程序

begin
 
  att_time_ins(:employee_id,:org_id,:time_status);
 
end;

请帮我根据 IN OUT 参数修改这些东西,即 Employee_id 应该是 IN OUT 参数。没有关于在 PLSQL 块中传递绑定变量的适当文档。

【问题讨论】:

  • 为什么你认为你需要在通话中做一些不同的事情,一旦你将程序从EMP_ID in varchar2更改为EMP_ID in out varchar2?我不明白为什么您需要将其输入/输出,因为您没有更改过程中的值。目前尚不清楚您要解决的实际问题是什么。
  • 在Oracle 或用户编写的过程中,所有形式参数总是由编译器生成为绑定变量。您的过程的形式参数包括 EMP_ID。所以它是一个绑定变量。但除此之外,您的声明不会将其用作输出。在过程中,in out 参数可以用作赋值中的左操作数或右操作数,即您可以更改它的值;您想要的语句不会更改值,因此它不是 OUT。注意:使用 IN OUT( 或 OUT) 的变量与输出不同。您的程序正在运行 - 不要更改任何内容。
  • 但请更改to_date(sysdate,'DD/MM/YYYY')。你不应该打电话给to_date 的东西是已经一个日期。当您使用 NLS 设置将 sysdate 隐式转换为字符串时。其他人从具有不同设置的会话中调用您的过程将得到不同的行为,并且很可能是错误。如果打算“删除”时间,请改用trunc(sysdate),默认情况下会将时间截断到午夜。 (当然,你不能有一个没有时间的约会。)

标签: plsql oracle-apex rest bind-variables


【解决方案1】:

假设您有一个名为PR_PROC 的过程,您可以使用VARIABLE 语句来传递IN OUTOUT 类型的变量。

CREATE OR REPLACE PROCEDURE PR_PROC (EMP_NAME   IN     VARCHAR2,
                                     EMP_ID     IN OUT VARCHAR2)
IS
BEGIN
   DBMS_OUTPUT.PUT_LINE (EMP_NAME||EMP_ID);

END;
   
VARIABLE KURSOR VARCHAR2
BEGIN
 :KURSOR:='4';
 PR_PROC('SENIOR',:KURSOR);
END;

注意:如果您使用的是 TOAD 编辑器,您可以按 F5 使其工作。

Oracle VARIABLE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2015-03-29
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多