質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

Q&A

解決済

1回答

327閲覧

returnの戻り値 デバッグ実行時のACLアクセス制限

退会済みユーザー

退会済みユーザー

総合スコア0

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

0グッド

1クリップ

投稿2017/10/18 01:24

編集2017/10/18 03:48

oracle12c を勉強用に使用し、sqldeveloperを使っています。

下記のコードの戻り値、動きを確かめる為デバッグを行って確認しようと思ったのですがデバッグ実行時アクセス制限(ACL)が発生します。
デバッグではなく実行であればACLは発生しません。実行に関してはACL制限が解除できたと思うのですがデバッグでの解除方法が調べたのですがわかりません。

また下記コードのreturnの戻り値としてどのようにコードを修正するのが適切となるでしょうか? 現在はreturn baf;と記入していますが戻ってきていないと思います。

create or replace function TEST1(TS1 in number) return number is handle utl_file.file_type; baf varchar(60); T1 TEST.TS1%TYPE; BEGIN handle := utl_file.fopen('C:\Users\user\Desktop\tcbat\interface','text4.txt','r'); BEGIN LOOP -- 一行ずつ読み込み utl_file.get_line(handle,baf); dbms_output.put_line(baf); insert into TEST(TS1) values (baf); END LOOP; exception when no_data_found then dbms_output.put_line('終わり'); END; utl_file.fclose(handle); exception when others then utl_file.fclose_all; return baf; END;

以上よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2017/10/18 03:34

Accessタグは関係ないですね。
guest

回答1

0

ベストアンサー

ACLに関してはよくわかりませんが、コードの内容について以下列挙します。

・戻り値の定義はNumberなのに、返却しようとしているのはVarchar(=buf)
・外側の例外処理(exception)の前にReturnが無い。
・LOOPの終了条件が無い(多分exceptionでexitしたいのだと思うけど)

投稿2017/10/18 03:33

編集2017/10/18 03:35
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/18 04:11 編集

回答ありがとうございます。 このように修正してみました。しかし無効なファイル操作とエラーがでるので考えてみたいと思います。 create or replace function TEST1(TS1 in number) return number is handle utl_file.file_type; baf number(20); T1 TEST.TS1%TYPE; BEGIN handle := utl_file.fopen('C:\Users\user\Desktop\tcbat\interface','text4.txt','r'); LOOP BEGIN -- 一行ずつ読み込み utl_file.get_line(handle,baf); insert into TEST(TS1) values (baf); return baf; exception when no_data_found then exit; end; END LOOP; utl_file.fclose(handle); END;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問