pl/sql 中带参数的过程
Posted
技术标签:
【中文标题】pl/sql 中带参数的过程【英文标题】:Procedure with parameters in pl/sql 【发布时间】:2021-12-30 07:49:56 【问题描述】:为什么添加参数后这个程序不起作用?
【问题讨论】:
请不要粘贴截图,使用格式化文本见meta.***.com/questions/285551/… 正如@Wernfried Domscheit 已经提到的,当您可以在适当的标签中键入代码和错误消息以使其可见时,请不要使用屏幕截图来发布您的问题。这有助于其他用户搜索错误消息以寻找他们自己问题的答案。此外,在SYSTEM用户中编写自己的代码不是一个好习惯,即在数据库中执行管理工作的用户,最好创建一个具有方便权限的用户(在自己的对象中创建和写入)并编写你的代码在那里,所以你有分离的管理任务和应用程序 【参考方案1】:不需要IN OUT
参数; IN
就足够了(因为 PLS_00363: SYSDATE 在调用过程时不能用作分配目标)。
当您操作参数的值时,我为此目的声明了局部变量。
另外,next_day
不能与 7
一起使用;使用日期名称(因此我的 alter session
将语言设置为英语,以便我可以使用 SUNDAY
作为日期名称)。
(我们不是已经讨论过了吗?你之前的问题去哪儿了?对,这里是:Function Next_Day in pl/sql;你为什么要创建另一个帐户?)
固定后:
SQL> CREATE OR REPLACE PROCEDURE liczba_niedziel (data_od IN DATE,
2 data_do IN DATE)
3 IS
4 l_data_od DATE;
5 l_data_do DATE;
6 licznik NUMBER := 0;
7 BEGIN
8 l_data_od := NEXT_DAY (data_od, 'SUNDAY');
9 l_data_do := data_do;
10
11 WHILE l_data_od <= l_data_do
12 LOOP
13 l_data_od := l_data_od + 7;
14 licznik := licznik + 1;
15 END LOOP;
16
17 DBMS_OUTPUT.put_line (
18 '...' || SYSDATE || ' - ' || l_data_do || '...' || licznik);
19 END;
20 /
Procedure created.
测试:
SQL> ALTER SESSION SET nls_date_language = 'english';
Session altered.
SQL> EXEC liczba_niedziel(sysdate, date '2022-01-18');
...30.12.2021 - 18.01.2022...3
PL/SQL procedure successfully completed.
SQL>
【讨论】:
以上是关于pl/sql 中带参数的过程的主要内容,如果未能解决你的问题,请参考以下文章
如何使用EXECUTE关键字执行带参数的PL / SQL存储过程[关闭]