请问有人可以帮我理解为什么我可以在一个包中声明一个硬编码日期值,但不能从查询中赋值?我看过很多例子(包括参考书),都展示了硬编码值的声明,但我无法找到通过查询将值赋给变量的例子。
这是可以的:
create or replace package body PACKAGE_NAME AS
tDate DATE := '2012-05-30';
-- ...procedures follow
这是允许的:
create or replace package body PACKAGE_NAME AS
tDate DATE := sysdate;
这是不允许的:
create or replace package body PACKAGE_NAME AS
tDate DATE := select MAX(date_) from Table_Name;
我已经尝试了多种方法,即使无法工作我也能在程序本身中使用它。但是我想知道为什么我不能用这种方式给
tDate
赋值?具体的错误是:
遇到符号“SELECT”,但要求的是....
补充一下,在存储过程中可以通过查询分配变量值,但是同样的过程似乎在包体中无法工作。
PROCEDURE Proc_Name IS
tDate Date;
BEGIN
SELECT MAX(date_) into tDate from Table_Name;
CREATE OR REPLACE PACKAGE MY_PACKAGE...END MY_PACKAGE;
然后是CREATE OR REPLACE PACKAGE BODY MY_PACKAGE...END MY_PACKAGE;
。至于“为什么必须这样做……”——长答案是,您不能在变量初始化中使用可执行语句(例如 SELECT),这正是包初始化块存在的原因——以便您可以在会话访问初始化会话变量的包时执行代码。简短的答案是“因为你必须这样做”。 :-) 分享并享受。 - Bob Jarvis - Слава Україні