我想在PL/SQL中使用声明变量创建一个存储过程。但它不起作用。我如何创建这个?
我的代码看起来像:
create or replace procedure only_for_test as
begin
declare
maxdate date;
BEGIN
SELECT to_date(max(create_date))
INTO maxdate
FROM table_a where product = 'A' and create_date >= date'2023-09-01';
END;
if
maxdate = to_date(sysdate)
then
begin
proc_test;
end;
end if;
commit;
end only_for_test;
字符串
上面的代码显示错误:
PLS-00201:必须声明标识符“MAXDATE”
PL/SQL:忽略语句
请帮帮我。非常感谢。
2条答案
按热度按时间8fq7wneg1#
你的问题是你有嵌套的PL/SQL块,你试图在外部块中使用
MAXDATE
,而在内部块中只有DECLARE
d。字符串
首先创建一个匿名PL/SQL块(而不是一个过程),并测试你想要做的事情是否有效:
型
注意事项:
DECLARE
,在这里声明变量,然后在最后声明一个BEGIN
和一个END
。*Never在已经是
DATE
的值上使用TO_DATE
。如果你想比较忽略DATE
的时间分量的值,那么使用TRUNC
将日期截断到午夜。COMMIT
,因为这会阻止您运行多个过程,然后在后面的过程失败时使用ROLLBACK
回滚第一个过程中的更改。相反,从调用过程的代码中使用COMMIT
。一旦一个简单的PL/SQL块开始工作,然后将块开始处的
DECLARE
语句交换为过程签名:型
vmdwslir2#
它是关于作用域的。阅读下面代码中的注解。
首先,测试程序(以避免错误,它不存在):
字符串
这是你的过程(修改了一点,以便它在我的模式中运行):
型
这就是工作原理-变量在过程级别声明:
型