- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
SQL - 無法將多個命令插入準備好的語句中
親愛的論壇會員,
當使用 jmp 查詢 amazon redshift 時,我需要一起發送兩個語句,但由於某種原因,我收到一條錯誤消息:
不幸的是,我的查詢非常複雜,並且不能僅使用每個單獨表的“Where”語句。
如果有人知道如何克服這個問題,那將會很有幫助。
謝謝
本文原文为English (US)撰写,为方便起见已翻译过。 当你回复时,它也会被翻译回English (US)。
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:SQL - 無法將多個命令插入準備好的語句
這種方法可能有助於:
調用執行超級複雜查詢的 PL/SQL 過程,並創建一個臨時表。
然後從臨時表中選擇 *。
這是一些執行類似操作的代碼:
event_sql = evalinsert(
"DECLARE
l_proc_name VARCHAR2 (100) := 'Get_Reference_PTs';
l_user_SID NUMBER := SYS_CONTEXT('USERENV', 'SID');
l_user_name VARCHAR2 (30) := UPPER(SYS_CONTEXT('USERENV', 'OS_USER'));
BEGIN
INSERT INTO quality_attrib (SID, OS_USER, Completion_Time, Progress_Text)
VALUES (l_user_SID, l_user_name, SYSTIMESTAMP, 'START Get_Reference_PTs');
COMMIT;
INSERT INTO Ref_PT_List (SID, OS_USER, PT_Name)
(SELECT DISTINCT l_user_SID, l_user_name, mu.pt_name
FROM info ci,
drug cd,
reaction cr,
meddra_uta mu,
WHERE cd.case_id = ci.case_id
AND cr.case_id = ci.case_id
AND cr.reported_meddra_uta_id = mu.meddra_uta_id
AND cd.cdd_generic_id = rd.cdd_generic_id
AND ci.report_type_code_id = 8
AND rd.calendar_id = ^one_calendar_id^
AND cd.drug_character_code_id IN (31, 32)
^pt_clause^
^date_clause^
^event_type_clause^
);
COMMIT;
INSERT INTO quality_attrib (SID, OS_USER, Completion_Time, Progress_Text)
VALUES (l_user_SID, l_user_name, SYSTIMESTAMP, 'END Get_Reference_PTs');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
log_error_message(SQLCODE, SQLERRM, l_proc_name);
END; ");
Execute SQL(dbc, event_sql);
Execute SQL(dbc, "select * from ref_pt_list");
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:SQL - 無法將多個命令插入準備好的語句
親愛的羅恩,到目前為止我還沒有這樣做,但在這裡你要求對兩個表進行新的 sql 查詢,我想,它無法處理。 您是否嘗試改為執行 sql?
另一種可能性是兩個查詢之間的聯合只有一個。 但這需要以相同順序完全相同的列。
本文原文为English (US)撰写,为方便起见已翻译过。 当你回复时,它也会被翻译回English (US)。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:SQL - 無法將多個命令插入準備好的語句
如果我使用以下腳本嘗試它,我會得到同樣的錯誤:
// connect to database - open data base
DBConnection = Create Database Connection(
"ODBC:DSN=database-project;EPWD=.....;");
sql_events =
"\[
select * from "public"."logs" "t1";
select * from "public"."logs" "t1";
]\"
dt1 = execute sql ( DBConnection, eval insert ( sql_events , "¤") , "Events from logs" );
該問題可能類似於此討論:
https://community.jmp.com/t5/Discussions/SQL-query-to-ODBC-datasource-SQL-server-with-temporary-tables/td-p/457582
但那裡的解決方案並不完全適用於紅移。
本文原文为English (US)撰写,为方便起见已翻译过。 当你回复时,它也会被翻译回English (US)。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:SQL - 無法將多個命令插入準備好的語句
通常,您不能通過一次調用 EXECUTE SQL 來執行兩條 SQL 語句。兩種說法都是一樣的;也許你只是舉個例子?
為什麼要同時運行兩個 SQL 語句?EXECUTE SQL 為每個 SQL 語句返回一個數據集。
為什麼不只運行兩個 EXECUTE SQL 命令呢?
本文原文为English (US)撰写,为方便起见已翻译过。 当你回复时,它也会被翻译回English (US)。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:SQL - 無法將多個命令插入準備好的語句
你是對的@pmroz ,這只是兩個語句的一個例子。
有時我需要兩條語句來創建子樣本(臨時表)或定義函數。
在大多數情況下,我設法使用“With”語句而不是臨時表,但並非總是如此。特別是當使用“With”語句需要非常複雜的子查詢時,這是不允許的。 .
本文原文为English (US)撰写,为方便起见已翻译过。 当你回复时,它也会被翻译回English (US)。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:SQL - 無法將多個命令插入準備好的語句
這種方法可能有助於:
調用執行超級複雜查詢的 PL/SQL 過程,並創建一個臨時表。
然後從臨時表中選擇 *。
這是一些執行類似操作的代碼:
event_sql = evalinsert(
"DECLARE
l_proc_name VARCHAR2 (100) := 'Get_Reference_PTs';
l_user_SID NUMBER := SYS_CONTEXT('USERENV', 'SID');
l_user_name VARCHAR2 (30) := UPPER(SYS_CONTEXT('USERENV', 'OS_USER'));
BEGIN
INSERT INTO quality_attrib (SID, OS_USER, Completion_Time, Progress_Text)
VALUES (l_user_SID, l_user_name, SYSTIMESTAMP, 'START Get_Reference_PTs');
COMMIT;
INSERT INTO Ref_PT_List (SID, OS_USER, PT_Name)
(SELECT DISTINCT l_user_SID, l_user_name, mu.pt_name
FROM info ci,
drug cd,
reaction cr,
meddra_uta mu,
WHERE cd.case_id = ci.case_id
AND cr.case_id = ci.case_id
AND cr.reported_meddra_uta_id = mu.meddra_uta_id
AND cd.cdd_generic_id = rd.cdd_generic_id
AND ci.report_type_code_id = 8
AND rd.calendar_id = ^one_calendar_id^
AND cd.drug_character_code_id IN (31, 32)
^pt_clause^
^date_clause^
^event_type_clause^
);
COMMIT;
INSERT INTO quality_attrib (SID, OS_USER, Completion_Time, Progress_Text)
VALUES (l_user_SID, l_user_name, SYSTIMESTAMP, 'END Get_Reference_PTs');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
log_error_message(SQLCODE, SQLERRM, l_proc_name);
END; ");
Execute SQL(dbc, event_sql);
Execute SQL(dbc, "select * from ref_pt_list");
本文原文为English (US)撰写,为方便起见已翻译过。 当你回复时,它也会被翻译回English (US)。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:SQL - 無法將多個命令插入準備好的語句
非常感謝@pmroz
將這兩個語句拆分為單獨的 Execute SQL 語句是完美的。
本文原文为English (US)撰写,为方便起见已翻译过。 当你回复时,它也会被翻译回English (US)。