有一个模式说'A',其中有一个名为'B'的包,其中这是一个函数(如下)。在此函数中,使用“ TIMESTMAP”,而在11g中进行编译时会出错。我想为TIMESTAMP创建一个公共同义词。任何人都可以为我提供相同的脚本。
FUNCTION generate_random_number
Return Number
IS
l_seq_no VARCHA2(6)
l_sys_date CHAR(10)
BEGIN
SELECT LTRIM(TO_CHAR(TIMESTAMP.NEXTVAL,'000000'), ' ')
INTO l_seq_no
from DUAL;
SELECT TO_CHAR(SYSDATE, 'H24:MI:SS')
INTO l_sys_date
from DUAL
答案 0 :(得分:2)
TIMESTAMP是一个保留字,所以它会将你的代码解释为TIMESTAMP是一种数据类型(所以我猜你得到的错误是nextval必须声明的东西)。因此,虽然您可以创建一个名为TIMESTAMP的序列,但这样做非常愚蠢。你应该重命名同义词。如果没有,您可以创建具有不同名称的同义词(公共或私人)。
例如:
SQL> create sequence timestamp start with 1;
Sequence created.
SQL>
此序列可以在SQL中使用,但不能在PL / SQL中使用(这是OP正在尝试执行的操作)。该函数将无法编译(PL-00302错误)。所以我们必须为它创建一个同义词:
SQL> create synonym t for timestamp;
Synonym created.
然后在代码中使用T
。
您的代码也有很多其他拼写错误。遗失;
且输入错误varchar2
。最后char(10)
的时间意味着它的空白填充有2个尾随空格(因为字符串的长度将是8个字符)。