如何在oracle中创建公共synynom

时间:2013-02-11 07:26:29

标签: oracle oracle11g

有一个模式说'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

1 个答案:

答案 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个字符)。