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

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

ただいまの
回答率

91.77%

  • SQL

    1441questions

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

  • PL/SQL

    31questions

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

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

解決済

回答 4

投稿 2017/08/07 13:10

  • 評価
  • クリップ 0
  • VIEW 94

takko

score 142

お疲れ様です。
takkoです。

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

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

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

よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

0

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

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

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

// 選択範囲の文字列の中で、空白行とコメントブロックを飛ばす、
// ※コメントブロック・・・/* */で囲まれる行
function line_shaping(text) {

    var text  = text.replace(/\r\n|\r/g, "\n");

    var lines = text.split( '\n' );
    var outArray = new Array();

    var flg = false;
    var str = "";
    var str2 = "";

    for ( var i = 0; i < lines.length; i++ ) {

        // 空行の場合は飛ばす
        if ( lines[i] == '' ) {
            continue;
        }

        str = lines[i];
        str2 = str.replace(/^\s+|\s+$/g,'');

        // 空行と先頭が"/*"で始まる場合
        if ( str2.indexOf("/*") === 0) {
            flg = true;
        }

        if (str.indexOf("*/") >= 0) {
        // 空行と先頭が"/*"で始まる場合
            flg = false;
            continue;
        }

        if ( flg == true ) {
            continue;
        }

        outArray.push( lines[i] );

    }

    str = outArray.join('\r\n');
    return str;

}

// 選択範囲のテキストを取得
var text = Editor.GetSelectedString(0);
// 変換後のテキストを出力
if ( text !== "" ) Editor.InsText(line_shaping(text));

投稿 2017/08/09 00:10

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

0

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

投稿 2017/08/07 13:23

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/08/07 13:39

    空白行の件、ありがとうございます。
    コメントブロック+空白行は無視されると覚えておきます。

    行コメントについては既知なのですが、
    開発のルールで、
    機能、実装者、実装日などをブロックコメントで書くのが決まりになっていて、そこを全てコメント行にするのは、厳しいようです・・・。

    キャンセル

  • 2017/08/07 14:15

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

    キャンセル

0

takko様

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

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

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

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

投稿 2017/08/07 15:13

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/08/07 15:56

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

    キャンセル

  • 2017/08/07 16:15

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

    キャンセル

0

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

// 選択範囲の文字列の中で、空白行とコメント行を飛ばす、
// ※コメント行・・・先頭が'--'で始まる行
function line_shaping(text) {

    var text  = text.replace(/\r\n|\r/g, "\n");

    var lines = text.split( '\n' );
    var outArray = new Array();

    for ( var i = 0; i < lines.length; i++ ) {

        // 空行と先頭が"--"で始まる行は飛ばす
        if ( lines[i] == '' || lines[i].indexOf("--") === 0) {
            continue;
        }

        outArray.push( lines[i] );
    }

    str = outArray.join('\r\n');
    return str;

}

// 選択範囲のテキストを取得
var text = Editor.GetSelectedString(0);
// 変換後のテキストを出力
if ( text !== "" ) Editor.InsText(line_shaping(text));

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

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

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

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

投稿 2017/08/07 20:01

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/08/08 09:04

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

    キャンセル

  • 2017/08/08 09:06

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

    キャンセル

  • 2017/08/08 09:07

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

    キャンセル

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

ただいまの回答率

91.77%

関連した質問

同じタグがついた質問を見る

  • SQL

    1441questions

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

  • PL/SQL

    31questions

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

閲覧数の多いPL/SQLの質問