【发布时间】: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