[解決済み] PLS-00201 - 識別子を宣言する必要があります。
2022-03-05 12:31:04
質問
PL/SQLスクリプトを実行し、以下のテーブルを作成しました。
TABLE_NAME VARCHAR2(30) := 'B2BOWNER.SSC_Page_Map';
このテーブルに対して、引数を使った挿入関数を作ってみました。
CREATE OR REPLACE FUNCTION F_SSC_Page_Map_Insert(
p_page_id IN B2BOWNER.SSC_Page_Map.Page_ID_NBR%TYPE,
p_page_type IN B2BOWNER.SSC_Page_Map.Page_Type%TYPE,
p_page_dcpn IN B2BOWNER.SSC_Page_Map.Page_Dcpn%TYPE)
宣言しなければならないと通告された
B2BOWNER.SSC_Page_Map
を、関数の引数として出現させる前に指定する必要があります。 なぜこのようなエラーが発生するのでしょうか?
EDIT : 実際のエラー
Warning: compiled but with compilation errors
Errors for FUNCTION F_SSC_PAGE_MAP_INSERT
LINE/COL ERROR
-------- -----------------------------------------------------------------
2/48 PLS-00201: identifier 'SSC_PAGE_MAP.PAGE_ID_NBR' must be declared
0/0 PL/SQL: Compilation unit analysis terminated
EDITです。 PL/SQL関数の完成
RETURN INTEGER
IS
TABLE_DOES_NOT_EXIST exception;
PRAGMA EXCEPTION_INIT(TABLE_DOES_NOT_EXIST, -942); -- ORA-00942
BEGIN
INSERT INTO
B2BOWNER.SSC_Page_Map VALUES(
p_page_id,
p_page_type,
p_page_dcpn);
RETURN 0;
EXCEPTION
WHEN TABLE_DOES_NOT_EXIST THEN
RETURN -1;
WHEN DUP_VAL_ON_INDEX THEN
RETURN -2;
WHEN INVALID_NUMBER THEN
RETURN -3;
WHEN OTHERS THEN
RETURN -4;
END;
SHOW ERRORS PROCEDURE F_SSC_Page_Map_Insert;
GRANT EXECUTE ON F_SSC_Page_Map_Insert TO B2B_USER_DBROLE;
RETURN INTEGER
EDITです。 引数を変更したところ、insertコマンドに関連する新しいエラーが発生しました。
CREATE OR REPLACE FUNCTION F_SSC_Page_Map_Insert(
p_page_id IN INTEGER,
p_page_type IN VARCHAR2,
p_page_dcpn IN VARCHAR2)
RETURN INTEGER
IS
TABLE_DOES_NOT_EXIST exception;
PRAGMA EXCEPTION_INIT(TABLE_DOES_NOT_EXIST, -942); -- ORA-00942
BEGIN
INSERT INTO
B2BOWNER.SSC_Page_Map VALUES(
p_page_id,
p_page_type,
p_page_dcpn);
エラー
Errors for FUNCTION F_SSC_PAGE_MAP_INSERT
LINE/COL ERROR
-------- -----------------------------------------------------------------
17/18 PL/SQL: ORA-00942: table or view does not exist
16/5 PL/SQL: SQL Statement ignored
テーブルが正しいスキーマで、正しい属性名と型であることが確認されています。
EDITです。 以下のコマンドを実行し、アクセス権があるかどうか確認しました。
DECLARE
count_this INTEGER;
BEGIN
select count(*) into count_this
from all_tables
where owner = 'B2BOWNER'
and table_name = 'SSC_PAGE_MAP';
DBMS_OUTPUT.PUT_LINE(count_this);
END;
受け取った出力は
1
PL/SQL procedure successfully completed.
テーブルにアクセスすることができます。
EDITです。
そこで、ようやくPL/SQLを使ってスキーマ経由でテーブルへの挿入を実施したところ、うまくいきました。 私は単に関数を作成する権限を持っていないように見えますが、それは仮定です。
EDITです。
実際のテーブルDDL文
v_create := 'CREATE TABLE ' || TABLE_NAME || ' (
PAGE_ID_NBR NUMERIC(10) NOT NULL Check(Page_ID_NBR > 0),
PAGE_TYPE VARCHAR2(50) NOT NULL,
PAGE_DCPN VARCHAR2(100) NOT NULL,
PRIMARY KEY(Page_ID_NBR, Page_Type))';
EXECUTE IMMEDIATE v_create;
COMMIT WORK;
COMMIT COMMENT 'Create Table';
解決方法は?
の下にTABLEを作成する場合
B2BOWNER
PL/SQL関数の前に必ずスキーマ名を付けてください。
B2BOWNER.F_SSC_Page_Map_Insert
.
DBAに指摘されるまで気がつかなかったのです。 自分のルートUSER/SCHEMAの下にテーブルを作成すれば、PL/SQL関数は問題なく動作したはずです。
関連
-
Oracleのカンマ区切り文字列を複数行に分割したデータ例
-
[解決済み】ORA-30926:ソーステーブルの安定した行のセットを取得できません。
-
[解決済み】ORA-00932: 整合性のないデータ型: 予想される - CLOB を取得しました。
-
[解決済み] ミリ秒を含む日付文字列に対するOracle to_date関数の使用
-
[解決済み] ORA-00955 "名前はすでに既存のオブジェクトによって使用されています"
-
[解決済み] ORA-04021: オブジェクトのロック待ちでタイムアウトが発生しました。
-
[解決済み] ORA-29283: 無効なファイル操作 ORA-06512: "SYS.UTL_FILE", 行 536 で。
-
[解決済み] ORA-00119: 無効な仕様 ORA-00132: 構文エラー
-
[解決済み] このPL/SQLは何が問題なのでしょうか?バインド変数 * が DECLARED ではありません。
-
[解決済み] ORA-4031 "unable to allocate x bytes of shared memory" を解決する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
オラクル表領域拡張の詳細
-
Oracle19c テーブルスペースの作成における落とし穴
-
PLSQL14ダウンロードとインストールチュートリアル
-
[解決済み】ソケットから読み込むデータがなくなるエラー
-
[解決済み] PLS-00302: component must be declared when it exists?」と表示されます。
-
[解決済み] PLS-00382: 式が不正です。
-
[解決済み] PLS-00306:Oracle SP の呼び出しで引数の数または種類が誤っている。
-
[解決済み] BATCHEDのインデックスによるテーブルアクセスとROWIDのインデックスによるテーブルアクセスの違い
-
[解決済み] 外部キーの追加エラー。ORA-02298: 検証できません - 親キーが見つかりませんでした
-
[解決済み] ORA-01747:user.table.column, table.column, または column の指定が無効です。