アプリ版:「スタンプのみでお礼する」機能のリリースについて

Oracle 9iを使ってsqlファイルを実行させたところ、タイトルにあるように、
PL/SQL: SQL Statement ignored
というエラーメッセージが出力されました。
いろいろ検索してみると、これは、私にシステム権限がないことからおこるとあったのですが、
その設定変更の仕方がいまいちよくわかりませんでした。設定変更のしかたを教えていただけないでしょうか。
また、設定変更したことによって変わるのは私自身のシステム権限だけであって、他にコンピュータ(UNIX)を共有している人たちには影響はありませんよね?
立て続けに質問ばかりすみませんが、よろしくおねがいします。

A 回答 (5件)

PL/SQLで権限がないということは、EXECUTE PROCEDUREシステム権限がないということでしょうか・・・。


前後のエラーも記載していただいた方が良いとは思いますが。

システム権限の付与方法は下記で行うことが可能です。
※ここでいう"ユーザ"はOracleユーザのことでスキーマとイコールです。
1.SYSTEMまたはSYS(DBA権限を持ったユーザ)でログイン
2.grant execute procedure to [対象ユーザ];
  または
  grant resource to [対象ユーザ];

以上で一応権限付与はできますが、どのような処理を行いたいかによって、これだけで解決するかどうかわかりません。
また、他の人への影響ですが、ユーザをどのように使用しているか、どのようなポリシーのシステムかによって異なります。(「私自身」というのが、セッションのことかスキーマのことかわかりませんでした。)
同じユーザを他の人と共通で使っていれば、もちろん他の人へ影響が出ますし、一人1ユーザ(スキーマ)で割当てられていれば、影響なく使えます。
「影響が出る」という意味は、セキュリティレベルが権限付与された分落ちるということで、機能的に使用できなくなることはありません。

なお、セッション単位で権限を割当てる方法はないと思っています。
付与した権限をセッション終了次第revokeすれば、元に戻るのではないでしょうか。

この回答への補足

念のためというか、前後のエラーも同時に表示しておきます。
2/2 PL/SQL: SQL Statement ignored
2/14 PL/SQL: ORA-04044: procedure, function, package, or type is not
allowed here
これの場合だと、システム権限の問題とかではなかったりするのでしょうか。
ちなみに、エラーが出ているのが、triggerの部分です。

補足日時:2005/03/15 22:10
    • good
    • 0

最初にお聞きしましたので、稼動実績のあるSQLと思っていましたが・・・。


「正常に動いたことは一度もない」ということですね?

Oracleでは稀に、許容できないはずの構造を作成順序によってはうまく作れてしまい、その結果誤ったエラー番号を表示してしまうことがあります。

記載していただいたORA-04044は「本文(BEGIN以下)2行目の14バイト目にプロシージャなどのオブジェクトを記載することはできない」という意味です。
一度、ViewingPendingにテストデータ(4列分)を入力してみてできるかどうか試していただけませんでしょうか?
(記載していただいたCreate文が正確であれば、できないと思いますよ。)

例)
insert into viewingpending values(1,1,sysdate,'TEST');
    • good
    • 3

一つのスキーマ内で同様(テスト用)のSQLを実行したところ、こちらでは問題なく動きました。



最初に戻りますが、なぜ「システム権限がないことに起因する」という結論に至ったのでしょうか。(ORA-04044からではその結論は出ないと思いますが・・・)

また、下記のViewingPendingテーブルのCreate文がすべてであるとすると、そもそもviewDateやviewCommentを格納するカラムがありませんね。
長くなるようでしたら、関連するカラムだけでも結構ですので、ViewingテーブルとViewingPendingテーブルのCreate文を再度記載していただくことは可能ですか?

この回答への補足

一度補足を投稿したつもりだったのですが、されていなかったみたいです。遅くなってすみません。

システム権限の有無が原因だと言う結論に至った理由は・・・実はよくわからないのです。あちこち調べまくって自分で出してしまった結果だったので、間違っていたのでしょうね・・・。

以下がViewingとViewingPendingテーブルです。
create table Viewing(
clientNo number(3),
propertyNo varchar2(4),
viewDate date,
viewComment varchar2(20),
primary key(clientNo, propertyNo),
foreign key(clientNo) references Client,
foreign key(PropertyNo) references PropertyForRent
);

create table ViewingPending(
clientNo number(3) not null,
propertyNo varchar2(4) not null,
primary key (clientNo, propertyNo),
foreign key (clientNo) references Viewing,
foreign key (propertyNo) references Viewing
);

補足日時:2005/03/19 10:24
    • good
    • 0

ViewingPendingオブジェクトはテーブルでしょうか?


下記を実行してみてください。
select object_type from user_objects where object_name = 'VIEWINGPENDING';

オブジェクトタイプがTABLEやVIEWなど値格納可能なオブジェクトでなければ同様のエラーが出ます。

ちなみに下記ソースの下から2行目の最後の部分は途切れただけですよね?

この回答への補足

あ。そうです。ソースが途切れていました。
正しくは、
BEGIN
insert into ViewingPending value(:old.clientNo, :old.propertyNo,:old.viewDate, :old.viewComment);
END;
でした。

ちなみに、ViewingPendingを実行してみたところ no rows selected と表示されました。
ちなみに、ViewingPendingは、テーブルで、下記のように指定してあります。
create table ViewingPending(
clientNo varchar2(5) not null,
propertyNo varchar2(4) not null,
primary key (clientNo, propertyNo),
foreign key (clientNo) references Viewing,
foreign key (propertyNo) references Viewing
);

補足日時:2005/03/16 20:47
    • good
    • 0

ORA-4044は基本的に構文エラーになります。


既に動かしている実績のあるSQLファイルでしょうか?
もう少し詳細に記載していただいた方が、糸口を見つけやすいと思います。

システム権限としては、RESOURCEロールを与えておけばTRIGGERを含むPL/SQLの作成・実行は可能になります。
権限の問題でどうしても引っかかるようであれば、一旦DBAロールを与えてみて、「権限の問題かどうか」という切り分けを行ってみてはいかがでしょうか。(本番環境では難しいかもしれませんが。)

この回答への補足

はい。すでに何度か動かしています。が、エラーがでているので、きちんとした結果が出ないでいます。
詳細に・・・ということでしたので、trigger関係の部分を下に示させていただきます。

<Define2Triggers.sql>

/**** NewPendingTrigger ****/
create or replace trigger NewPendingTrigger
after insert on Viewing
for each row

BEGIN
insert into ViewingPending values(:new.clientNo, :new.propertyNo);
END;

/**** RemovePendingTrigger ****/
create or replace trigger RemovePendingTrigger
after update of ViewComment on Viewing
for each row

BEGIN
insert into ViewingPending values(:old.clientNo, :old.propertyNo, :old.$
END;


NewPendingTriggerは、Viewingテーブルに入力があったときに、その入力をNewPendingTriggerにも入れる。
RemovePendingTriggerは、ViewingテーブルのviewCommentフィールドがアップデートされたときに、消されたデータをRemovePendingTriggerに入力するという処理を行います。

補足日時:2005/03/16 12:20
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A