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存储过程[关闭]

编写一个不带参数 Ins_Job 的 PL/SQL 过程,在表 JOBS 中插入新记录

PL/SQL 05 存储过程 procedure

带有参数的 PL/SQL 过程/函数从选择查询返回表

PL/SQL程序设计—— 存储函数&存储过程

带输入参数的 Oracle PL/SQL 函数