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

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

新規登録して質問してみよう
ただいま回答率
85.49%
PL/SQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

4回答

12458閲覧

PL/SQL コンパイル後show errorで返却されるエラー行について

King_of_Flies

総合スコア382

PL/SQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/08/07 04:10

お疲れ様です。
takkoです。

PL/SQLのコンパイルでshow errorをするとエラー行数が返却されますが、
このエラー行はコメントブロックを含めない行数ということがわかり、
実際に出力されたエラー行=エラーの箇所とはならないことが分かりました。

皆様はこの事象をどうやって対応していますか?
作成したPL/SQLのコードのコピーファイルからコメントブロックを削除したりしているのでしょうか?

少し気になりましたので、どのような対応をしているのか教えていただけたらと思います。

よろしくお願いします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

お疲れ様です。
そういう事ですか。。。

念のため、Oracle 12cでコメントブロック /* */の行がカウントされないかどうか確認してみましたが、やっぱり12cでは、コメントブロックでも問題なくカウントされるようです。

では、改修したソースです。
ころらでは、いかがでしょうか?

javascript

1// 選択範囲の文字列の中で、空白行とコメントブロックを飛ばす、 2// ※コメントブロック・・・/* */で囲まれる行 3function line_shaping(text) { 4 5 var text = text.replace(/\r\n|\r/g, "\n"); 6 7 var lines = text.split( '\n' ); 8 var outArray = new Array(); 9 10 var flg = false; 11 var str = ""; 12 var str2 = ""; 13 14 for ( var i = 0; i < lines.length; i++ ) { 15 16 // 空行の場合は飛ばす 17 if ( lines[i] == '' ) { 18 continue; 19 } 20 21 str = lines[i]; 22 str2 = str.replace(/^\s+|\s+$/g,''); 23 24 // 空行と先頭が"/*"で始まる場合 25 if ( str2.indexOf("/*") === 0) { 26 flg = true; 27 } 28 29 if (str.indexOf("*/") >= 0) { 30 // 空行と先頭が"/*"で始まる場合 31 flg = false; 32 continue; 33 } 34 35 if ( flg == true ) { 36 continue; 37 } 38 39 outArray.push( lines[i] ); 40 41 } 42 43 str = outArray.join('\r\n'); 44 return str; 45 46} 47 48// 選択範囲のテキストを取得 49var text = Editor.GetSelectedString(0); 50// 変換後のテキストを出力 51if ( text !== "" ) Editor.InsText(line_shaping(text));

投稿2017/08/08 15:10

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

takkoさん、お待たせしました。
マクロ作成しましたよ。
これで、使えますかね?

javascriot

1// 選択範囲の文字列の中で、空白行とコメント行を飛ばす、 2// ※コメント行・・・先頭が'--'で始まる行 3function line_shaping(text) { 4 5 var text = text.replace(/\r\n|\r/g, "\n"); 6 7 var lines = text.split( '\n' ); 8 var outArray = new Array(); 9 10 for ( var i = 0; i < lines.length; i++ ) { 11 12 // 空行と先頭が"--"で始まる行は飛ばす 13 if ( lines[i] == '' || lines[i].indexOf("--") === 0) { 14 continue; 15 } 16 17 outArray.push( lines[i] ); 18 } 19 20 str = outArray.join('\r\n'); 21 return str; 22 23} 24 25// 選択範囲のテキストを取得 26var text = Editor.GetSelectedString(0); 27// 変換後のテキストを出力 28if ( text !== "" ) Editor.InsText(line_shaping(text));

このソースを、line_shaping.jpか何かの名前で保存して、サクラエディタのマクロとして実行して下さい。

サクラエディタでマクロを設定する方法はわかりますか?

もし、よくわからなければ、こちらのサイトが参考になると思います。
サクラエディタ マクロを開発してみる

というか、ソース自体もこのサイトの大文字・小文字変換のプログラムを改造したものです。

投稿2017/08/07 11:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

King_of_Flies

2017/08/08 00:04

お疲れ様です。 まずはマクロ作成ありがとう御座います。 実行前に確認なのですが、 PL/SQLのコメント行を飛ばしているようですが、コメント行はコンパイルのエラー行数にカウントされるため、飛ばさなくても良いと思います。 飛ばす対象になるのは、コメントブロックで、 その内容は /* */でくくられた箇所になります。
King_of_Flies

2017/08/08 00:06

カウントされない行 ⇒ コメントブロック、空行 カウントされる行 ⇒ コメント行 というややこしい仕様のようです。
King_of_Flies

2017/08/08 00:07

ここで言う「カウントされない」はエラーの返却行にカウントされないという意味です。
guest

0

takko様

まずひとつお聞きしたいのですが、Oracleのバージョンは何でしょうか?
当方、自宅PCのOracle 12cにてPL/SQLのエラーの行数を調べてみましたが、空白行、コメント行は飛ばされませんでした。

また、もしエディタにコピーして、それで空白行とコメント行をと飛ばせばいいのであれば、例えば、サクラエディタのマクロか何かで自作するのもいいのかなと思うんです。

サクラエディタのマクロってご存知ですか?
エディタは何を使っていますか?

エディタ教えて頂ければ、当方で簡単なマクロ作ってみようかと思いますが。。。

投稿2017/08/07 06:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

King_of_Flies

2017/08/07 06:56

サクラエディタを使用しています。 Oracleのバージョンは Oracle - OraClient11g_home1_32bitとなっています。
退会済みユーザー

退会済みユーザー

2017/08/07 07:15

了解です。 少々お待ちください。
guest

0

こんにちは。
show error では、ブロックコメント以外に空白行もカウントしません。
行コメント(--)はカウントされるので、こちらを使用すると良いと思います。

投稿2017/08/07 04:23

sazi

総合スコア25173

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

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

King_of_Flies

2017/08/07 04:39

空白行の件、ありがとうございます。 コメントブロック+空白行は無視されると覚えておきます。 行コメントについては既知なのですが、 開発のルールで、 機能、実装者、実装日などをブロックコメントで書くのが決まりになっていて、そこを全てコメント行にするのは、厳しいようです・・・。
sazi

2017/08/07 05:15

パッケージにして、「仕様部にブロックコメントで機能等を記述して、本体側は行コメントにする」、ではどうでしょう。 (仕様部でエラーがあり行がずれて表示されたとしても該当箇所を見つけにくいことはないし、そもそも仕様部に頻繁な変更は無い)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問