データテーブルをループするときの問題<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />私はSQLクエリに基づいてデータテーブルを持っています。データテーブルをループ処理して、元のデータテーブルの値に基づいて新しいSQLステートメントを作成して実行します。
何らかの理由で、sqlステートメントは最初に変数名を使用して2回作成され、その後実際のvariabel値を使用して作成されたようです。以下に、コードを実行したときのコードとログの結果を示します。問題に関するヒント/説明は大歓迎です。
br
ハンス
ここからコード:
dtMonitor = DatabaseOpslag( "SELECT distinct trial_no、trial_unit_reference FROMテーブル");
(i = 1、i <= nrows(dtMonitor)、i ++、
show(:trial_no ;
show(:trial_unit_reference ;
"(" PD% "やIMPACT_ALL_ISSUES.trial_no =のようなIMPACT_ALL_ISSUES.ISSUE_CATEGORY_CODEのSELECTステートメント" || Char(EVAL(:trial_no ))|| "およびIMPACT_ALL_ISSUES.trial_unit_reference like" || Char(EVAL(:trial_unit_reference) ))|| "");
;
/ *:
ここからログイン:
:TRIAL_NO = 3748;
:TRIAL_UNIT_REFERENCE = "822";
「IMPACT_UNIT_LEVEL ON(IMPACT_ALL_ISSUES.UNIT_KEY = IMPACT_UNIT_LEVEL.UNIT_KEY)AND(IMPACT_ALL_ISSUESをJOIN IMPACT_ALL_ISSUES INNER FROM PRIMARY_INVESTIGATOR、COUNTRY_NAME、IMPACT_ALL_ISSUES.TRIAL_UNIT_REFERENCE、PATIENT_ENTRY_NO、ISSUE_CATEGORY_DESC、ISSUE_TITLE、ISSUE_DESC、ISSUE_ACTION、GCP_ISSUE、ISSUE_CREATED_BY_FORENAME、ISSUE_CREATED_BY_SURNAME、CREATED_DATE、CLOSED_DATE、ISSUE_RESOLVEDを選択します。TRIAL_NO = IMPACT_UNIT_LEVEL.TRIAL_NO)ここで、IMPACT_ALL_ISSUES.ISSUE_CATEGORY_CODEは 'PD%'、IMPACT_ALL_ISSUES.trial_no = "||のようになります。Char(Eval(:TRIAL_NO ))|| "とIMPACT_ALL_ISSUES.trial_unit_referenceが好きです" || Char(Eval(:TRIAL_UNIT_REFERENCE ))|| "" =「SELECT PRIMARY_INVESTIGATOR、COUNTRY_NAME、IMPACT_ALL_ISSUES.TRIAL_UNIT_REFERENCE、PATIENT_ENTRY_NO、ISSUE_CATEGORY_DESC、ISSUE_TITLE、ISSUE_DESC、ISSUE_ACTION、GCP_ISSUE、ISSUE_CREATED_BY_FORENAME、ISSUE_CREATED_BY_SURNAME、IMPACT_ALL_ISSUES INNER FROM CREATED_DATE、CLOSED_DATE、ISSUE_RESOLVED IMPACT_UNIT_LEVEL ONをJOIN(IMPACT_ALL_ISSUES.UNIT_KEY = IMPACT_UNIT_LEVEL.UNIT_KEY)AND (IMPACT_ALL_ISSUES.TRIAL_NO = IMPACT_UNIT_LEVEL.TRIAL_NO)ここで、IMPACT_ALL_ISSUES.ISSUE_CATEGORY_CODEは 'PD%'、IMPACT_ALL_ISSUES.trial_no = 3748、IMPACT_ALL_ISSUES.trial_unit_referenceは822のようになります。
再:データテーブルをループするときの問題新しいテーブルが作成されたとき、および別のテーブルをクリックしたときに、JMPの現在のデータテーブルが変わります。 現在のデータテーブルに依存するのではなく、明示的なテーブル参照を使用することをお勧めします。
クレイゲ
再:データテーブルをループするときの問題助けてくれてありがとう。テーブルをプレフィックスとして使用すると違いが生じました。
再:データテーブルをループするときの問題それがトリックでした - ありがとう
だから私の理解/学習のためだけに:私は変数を参照しようとするときに私が参照しているのはどのデータテーブルであるかについて混乱しますか?しかし、解決された接頭辞としての表では?
再:データテーブルをループするときの問題Oracle ODBC SQLに使用するエラートラップユーティリティをファイル交換に追加しました。 クリックここにそれを見るために。 これはOracle固有のものですが、他のデータベースにも適用できます。
再:データテーブルをループするときの問題 Cヘイルズ正しい。 しかしあなたのテーブル変数は dtmonitor ではありません。 ループ内のsqlステートメントに次のものが必要です。
dtmonitor : trial_no [ 私 ]
そして
dtmonitor : TRIAL_UNIT_REFERENCE [ 私 ]
再:データテーブルをループするときの問題JMPのエラーメッセージには、初めて表示されたときの説明が少し必要です。
名前未解決:アクセス中のtrial_no、または 'trial_no'の評価、:trial_no / * ### * /
それは何が悪かったのですが、どこに?次の行は、エラーにどのようにフラグが立てられるかを示しています。
次のスクリプトでは、/ * ### * /でマークされたエラー
D1 = Dialog( "prompt"、Monitor = edittext( "Monitor initials"));
... スクリプトの束をスキップして検索...
|| Char(:trial_no / * ### * / )||
JMPが調べているデータテーブルには、"trial_no"という列がありません。 複数のデータテーブルがある場合は、dt:trial_noを使用してテーブル内で変数を見つけることができます。
再:データテーブルをループするときの問題私による愚かなミスすみません:-)
スペルを修正しました。スクリプトを実行してSQLステートメントを表示しただけで、ステートメントは期待どおりに生成されたように見えます。しかし、私はSQLクエリを作成する関数にSQLステートメントを渡して結果をテーブルに入れようとすると、その関数は一度だけ実行され、その後エラーをスローします。sqlステートメント(logshow.jsl)のみを表示するログと、実行しようとするログ(logexecute.jsl)を作成しました。
私はjmpスクリプトに慣れていないので、どうすればよいかわかりませんか。
再:データテーブルをループするときの問題あなたは最初のものが欠けています e sql_statementにあります。
これを変更してください。
見せる ( sql_statment ) ;
これに:
見せる ( sql_statement ) ;
再:データテーブルをループするときの問題これを見てくれてありがとう、しかし私はまだ私が以下のログからコードを見ることを試みるsqlステートメントを作ることができない:
コード形式はこちら:
dtMonitor = DabaseOpslag ( "SELECT" trial_no、trial_unit_reference FROM IMPACT_MONITOR_WORKLOAD '' || Monitor || "'およびsite_closed_dateなどのユーザー名がNULLです" ) ;
にとって ( i = 1、i <= nrows ( dtMonitor ) 、私は+ +、
sql_statementは=「SELECT PRIMARY_INVESTIGATOR、COUNTRY_NAME、IMPACT_ALL_ISSUES.TRIAL_UNIT_REFERENCE、PATIENT_ENTRY_NO、ISSUE_CATEGORY_DESC、ISSUE_TITLE、ISSUE_DESC、ISSUE_ACTION、GCP_ISSUE、ISSUE_CREATED_BY_FORENAME、ISSUE_CREATED_BY_SURNAME、IMPACT_ALL_ISSUES INNER FROM CREATED_DATE、CLOSED_DATE、ISSUE_RESOLVED IMPACT_UNIT_LEVEL ONをJOIN(IMPACT_ALL_ISSUES.UNIT_KEY = IMPACT_UNIT_LEVEL.UNIT_KEY)AND( IMPACT_ALL_ISSUES.TRIAL_NO = IMPACT_UNIT_LEVEL.TRIAL_NO)ここで、IMPACT_ALL_ISSUES.ISSUE_CATEGORY_CODEは 'PD%'およびIMPACT_ALL_ISSUES.trial_no = "|| Charのようになります。 ( :trial_no [ 私 ]) || "and IMPACT_ALL_ISSUES.trial_unit_reference like" || Char ( :trial_unit_reference [ 私 ]) || "";
見せる ( sql_statment ) ;
) ;
/ *:
LOGレスポンス:
名前未解決:アクセス中のsql_statmentまたは 'sql_statment'の評価、sql_statment / * ### * /
再:データテーブルをループするときの問題はい、show()は単純な変数名に対して最もよく機能します。 複雑な表現は分かりにくい答えを生み出します。
再:データテーブルをループするときの問題EVALを削除することができます。 SQLステートメントを変数と等しく設定してから、その変数を表示します。
にとって ( 私 = 1 、私 <= 眉 ( dtMonitor ) 、私 ++、
見せる ( : trial_no [ 私 ]) ;
見せる ( : trial_unit_reference [ 私 ]) ;
sql_statement =
"SELECTステートメント
IMPACT_ALL_ISSUES.ISSUE_CATEGORY_CODEは 'PD%'のようになります。
およびIMPACT_ALL_ISSUES.trial_no = " || チャー ( : trial_no [ 私 ]) || 「
とIMPACT_ALL_ISSUES.trial_unit_referenceは「」のように || チャー ( : trial_unit_reference [ 私 ]) ;
見せる ( sql_statement ) ;
) ;