【緊急!】SQL文を実行できたと証明する方法

このQ&Aのポイント
  • ITエンジニア研修でSQL文を実行し、提出したが実行できないと指摘された。実行できたことを証明する方法を模索中。
  • テキストの問題ではISBNコードに「ISBN」を追加するSQL文を提出したが、実行できないと指摘された。実行できたことを証明する方法を模索中。
  • Oracle SQL Developer上で実行したコードを提出したが、実行できないと指摘され、証明する方法を探している。
回答を見る
  • ベストアンサー

【緊急!】SQL文を実行できたと証明する方法

2月からITエンジニアとして研修を受けている者です。 最初の研修として、テキストに書いてあるSQLの問題を解いてOracle SQL Developer上で実行し、そのコードを提出するというものがありました。 そちらに関しては、全て添削をして頂き、終了したのですが、今日になって、実行出来ないということになり、責められました。 確かに、今日同じコードを実行しエラーが出るのを確認しましたが、私がその問題を解いた時はきちんと実行できるのを確認したことを記憶しています。 私は「Oracle SQL Developer上で実行できるのを確認してから提出した」と主張しましたが、信じてもらえず、何か証明する方法はないかと模索しております。 テキストの問題は、booksテーブルのISBNコード(isbn列)の先頭に、固定値で「ISBN」を追加するというものです。 isbn列のデータ型はCHAR(17)で、 下記のコードを提出しました。 UPDATE books SET isbn = CONCAT('ISBN', isbn) ; ただ、自宅で予習した際はエラーが発生し、列の定義をvarchar(2000)に変更したのですが、会社で実行した際はそのまま実行出来たので、列の定義が変更されていた可能性があります。 責られている点は、提出したコードでエラーが出ることではなく、「コードを実行せずに提出した」というです。 自身が実行せずに提出したのなら、反省して、二度と同じことをしないようにしようと思えますが、一方的に決めつけられて、信じてもらえず、理不尽さを感じております。 明日3/9の9:30までにきちんとOracle SQL Developer上で実行したと証明したいです。 私も方法がないか情報収集しますが、こういったことに詳しい方、アドバイスを頂けましたら幸いです。 何卒よろしくお願い致します。

  • Oracle
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#217196
noname#217196
回答No.1

単純に考えると、君が接続して使ったデータベースファイルの当該テーブルの当該項目のデータが期待通り更新ずみなら、SQL文実行は成功したと言えそう。SQL DeveloperにはSQL実行履歴を閲覧できる機能があるから、実行したかどうかだけなら、確認できるかも(履歴が直近のものしか残ってなくて何日も前の実行だと難しい)。当該テーブルを君が作成したのなら、その履歴も残っているはずだから当該項目のデータ型がもともとvarchar型で作られ、君の提出したSQL文実行前に変更した履歴がないことも念のためチェックしよう。 以上を確認できたら、問題は当該項目のデータ型を変更した上での実行かどうかになりそうだから、SQL実行履歴を見るか、ログファイル(Oracle DBサーバー側、SQL Developerアプリケーション側ともログ出力設定しないまま使っていたなら諦めるしかない)が残っていてアクセス権限があるなら、SQL文実行時刻またはSQL文そのもので探してその時刻を基準に、テーブルの当該項目の文字列データ型が変更されていないかを探すくらい。 検査担当者が君の使ったデータベースファイルで試した結果なのか、別のデータベースファイルで試した結果なのかが気がかりだけどね。 なお、char型は固定長の文字列、varchar型は可変長の文字列を格納するという違いについては理解しとこう。固定長の格納ずみ文字列データに連結で文字列を足そうとしても固定長サイズを越えてしまうからエラーになる。空白文字などパディングされた文字列を除去したうえで連結処理しなくてはならないよ。

alice10969
質問者

お礼

ご回答頂きまして、ありがとうございました。 色々試してみたのですが、履歴は残っていませんでした。 今回の経験で、証拠を取っておく大切さを知ることが出来ました。 char型とvarchar型についても教えて頂きまして、ありがとうございました。

その他の回答 (2)

回答No.3

SQL Developper 自体のSQL履歴を提出すれば?かなり前のまで残ってますよ。 文字列だと、どうにでも編集できてしまうので画像キャプチャーか何で提出すればいいのでは?

alice10969
質問者

お礼

ご回答ありがとうございます。 SQL履歴を確認したのですが、残っていませんでした。 その日以前の情報も見れるのですが、booksテーブルに関する履歴がselect文だとか単純なものしか残っていませんでした。 残っていたら、キャプチャをとりたいと思ってたんですけど、残念です。

  • weavaest
  • ベストアンサー率15% (157/1020)
回答No.2

サーバーにログは残ってませんか。 実行に成功したログか、テーブルを変更したログの何方かがあれば、話ししやすいですね。

関連するQ&A

  • 実行したSQLファイルの名前をファイルに出力する方法

    1つのSQLファイルの中で、複数のSQLファイルの実行するようになっていて、それを1度に実行するようにしているのですが、途中でエラーが発生している状態です。 どのSQLファイルでエラーが出ているか一目で分かるようにしたいのですが、SQLファイルの名前を実行結果と一緒にテキストファイルに出力したりできないでしょうか? sqlplusのspool機能では実行結果のみ出力されますが、複数のSQLファイルを実行した場合にどの段階でエラーが出ているのか分かりづらいのでよい方法があれば教えてほしいです。 よろしくお願いします。(DBはOracle 10gです。)

  • Sql developer .sqlファイル実行

    SQL developerから、.sqlファイルの実行はできないのでしょうか? 家のパソコンに、vurtual Box でwindows上にLinuxをインストールして、そこにOracleを乗っけて勉強しています。 単純に、spcreate.sql を開きたかっただけなのですが、 windows上から、Sqlplusで下記を実行した場合 @?/rdbms/admin/spcreate.sql は、ちゃんとファイルを開くことができます。 しかしwindows上の、SQLdeveloperからは、上記の方にコマンドをうっても、 エラーが発生しました。ファイルが開けません。 とでてきます。 これは、sqldeveloperは、ファイルを開くようなことができない仕様になっているということでしょうか? よろしくお願いいたします。

  • SQL 実行時にエラー

    oracle10gをfedora10にインストールしてfedora eclipseにDBViewerをプラグインしてoracleに接続しています。 DBViewerでテーブルを作成しようとSQL文を実行してみるとエラーが出てテーブルが作成できません。 エラー内容 ORA-01031:insufficient privileges oracleサイトで検索してみますと権限不足ということなのですが・・・・ DBViewerは接続できているのを確認しEnterprise Managerも起動を確認しています。 DBViewerに接続する時のユーザの権限に問題があるのでしょうか。 よろしくお願いします。

  • 動的SQLの処理件数

    PL/SQL中でSQL文を文字列に入れて、動的SQLを実行するんですが、その後にSQL%ROWCOUNTで処理件数ってとることってできますか? 自分のソースが問題なのか、動的SQLに原因があるのか悩んでいます。環境はOracle8iです。

  • ACCESSでのSQL文

    ACCESS2000を使用しています。 クエリをデザインビューから作成し、SQLビューで確認すると、例えば、 SELECT [test].[日付],[test].[トップ] FROM test; というような文章が作成されますが、ここで手動でSQL文に SELECT 日付,トップ FROM test; というふうに変更して実行した場合、[]を外したことによってエラーとなってしまう列が発生します。このエラーになる列とならない列が発生する原因をどなたかご存知ないでしょうか? ACCESSをデータベースとして他ツールによってデータを引き出すんですが、SQL文は自動作成されるので手で[]を入力しなければならないんです。 以上、よろしくお願いします。

  • oracle sql developerについて

    oracle sql developerを現場でインストールしました。 現場ではネットは全くつながっておりません。 postgreSQL2005は使用したことがあるのですが、 oracle sql developerは今まで全く使用したことが無く「インストールしてテスト台帳につなげてDB内容確認して」とか言われても正直困っております。 既存で作成されている「テスト台帳」にどうやって接続をすればいいのでしょうか? 設定方法やコネクトの手順がわかる方いましたらアドバイスをいただけないでしょうか? 現段階ではoracle sql developerをインストールしただけです。

  • 関数内でのSQL文実行→エラー検知されない・・・。

    いつもお世話になってます。 sasakidと申します。 現在、ASPで開発を進めています。 エラーが発生したらエラーページに飛ぶように適所に 以下の文を入れています。 '------エラー処理-------- If Err.Number <> 0 Then  Call goto_ErrPage() ←…エラーページに飛ぶ関数 End If ほとんどの個所でエラーページに飛ぶことを確認しました。 今、困っていることはSQL文を実行する関数内で SQL文にエラーがあったとしてもどうやらエラーが検知されていないようなのです。 '=====SQL文実行関数=========== Function exeSql1(sql) exeSql1 = -1 'エラーセット sql = sql & "ORDER BY test" '←…エラーが出るように追加    Set rs = db.Execute(sql) If Err.Number <> 0 Then Set rs = Nothing Exit Function End If (中略) exeSql1 = 0 End Function '======本文================== (中略)   tmp = exeSql1(sql) If tmp <> 0 Then '戻り値がエラー(0以外)だったらエラー画面へ Call goto_ErrPage() ←…エラーページに飛ぶ関数 End If (後略) ------------------------- どんなに関数:exeSql1で実行されるSQL文にエラーを含めてもエラーページに飛びません。 本文中で実行しているSQL文にエラーが含んでいるとエラーページに飛ぶのですが・・・。 こんな現象の原因などわかる方がいらっしゃいましたら教えてください!!! よろしくお願いします。     

  • ストアドをSQL*PLUSで実行したい。

    こんにちわ。 いまORACLE10gのPLSQLでストアドプロシジャを作成しています。 CREATE OR REPLACE PROCEDURE procXXXXXXXX ( oCNT1 OUT NUMBER , oCNT2 OUT NUMBER , nRET OUT NUMBER ) IS ~ というものですが,これをSQL*PLUSでテストとして実行したいのですが,変数定義などどうすれば良いでしょうか? 教えてください。よろしくお願いします。

  • PLSQLでのSQLの実行に関しての質問

    [環境] db:oracle 11g express edition os:windowsXP 言語:PLSQL [質問] PLSQLを使用したプログラムを作成していたのですが、SQLの文字数がVARCHAR2(32767)で宣言した変数の文字数を超えてしまいエラーとなります。 理由としては、引数で受け取った配列の数分だけUNIONでSQLを結合し、変数に格納しているのですが、配列の量が多いと変数の最大文字列を超えてしまうようです。(ソースイメージは下記に記述) 対応としては、変数を分割し、SQLを実行することや、SQLを組みなおすなどの対応が考えられるのですが、”(1)処理速度の都合上、できれば1度のSQLで実行したい。”、”(2)抽出条件が配列の条件によって、複雑に変わることと、既に稼働しているプログラムの為あまりソースを変更したくない”という理由から検索条件は変えずに、1度のSQLでどうにか実行できないかと考えています。 上記条件をクリアする何か良い方法はありますでしょうか? (もし、1回のSQLで実行は難しいのであれば、最悪配列を使用してSQLを分割して対応しようとは思っています。ただ、他に方法があるのであればそれに越したことはないです。) どなたか良い方法をご存知の方がおりましたら教えていただけないでしょうか? 宜しくお願い致します。 [ソースイメージ] <引数> 配列[100];          <-- 条件が格納された配列 <変数定義部> hensu_union VARCHAR2(32767); <-- 結合したSQLを格納 hensu_where VARCHAR2(1000); <-- SELECTの条件の格納 <プログラム部>  <省略>  .  .  .   FOR i IN 1..配列分 LOOP <-- 配列の数分、UNIONでSQLを結合 IF i > 1 THEN hensu_union := hensu_union || 'union '; END IF; hensu_union := hensu_union || 'select A,B,C .... from マスタA、マスタB WHERE ' || hensu_where ;  ←ここのUNIONで結合しすぎると最大文字列を超えエラー  END LOOP; . .  省略 . .   OPEN カーソル名 FOR hensu_union ; ←SQLを実行する部分でどうにか1回で済ませたい。                    VARCHAR2を超えるような文字列を格納できたり、                    他の良い方法はあるのか?

  • PL/SQLで…SQLの実行結果を変数を格納する方法

    毎度お世話になります。 SQL文の実行結果を変数に格納する方法がわからず困っております。 ご存知の方が居られましたらご教示いただきたい所存です。 常に1つの値しか返さないようなSQL文なので 変数V number := 'select count(B列) from B表'; みたいな書き方はで 入るか見てみようと思ったのですが コンパイルはできるものの、 実行すると「文字から数値への変換エラー。が発生しました」と なって上手くいきませんでした。 'select count(B列) from B表'が単なる文字列として解釈されて エラーになっているのだとは思うものの 正しい書き方がわからないのでよろしくお願いいたします。