-4

これが関数である「B」と呼ばれるパッケージがある「A」というスキーマがあります(以下)。この関数では、11gでコンパイルしているときにエラーが発生する「TIMESTMAP」が使用されます。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 に答える