-4

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

1 回答 1

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

于 2013-02-11T08:18:13.190 回答