將數據表結果集寫入已有的Oracle表<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
我對 JMP 腳本很陌生。 我已經構建了一個腳本來從 Oracle 表中讀取。 它將 Fit_Model 應用於數據(無法在 Oracle 中復制此數據,因此需要 JMP)並希望將其寫回 Oracle。
目前我正在使用 dt3<
這將創建表,但我確實需要能夠插入現有表而不是創建新表。
任何幫助將不勝感激,因為我說我是 JMP 腳本的新手,我在 JMP 腳本手冊中找不到答案。
謝謝,
Re: 將數據表結果集寫入已有的Oracle表只是想用一些新信息更新此線程。我試圖對 Oracle 表進行多次插入 (~8000),但一次插入一條記錄時遇到了性能問題。“技巧”是使用全部插入命令。下面的代碼一次插入 200 條記錄。
dt =數據表( “隨機數據” ) ;
dsn_string = “Driver={OraClient11g64 中的 Oracle};Dbq=<您的數據庫>;UID=;PWD=<密碼>;” ;
數據庫=創建數據庫連接( dsn_string ) ;
sql語句=
“\[創建表 .FYI_RANDOM
(身份證號碼,
RAND_INTEGER NUMBER,
RAND_NUMBER NUMBER,
RAND_DATETIME 日期,
RAND_STRING VARCHAR2(80))]\" ;
執行sql (數據庫, sql語句) ;
// 從表中刪除行(用於重複測試)
執行sql (數據庫, “截斷表 .fyi_random” ) ;
t2 =滴答秒() ;
最大插入數= 200 ; // 一次做200個插入
sql語句= “全部插入” ;
為了(我= 1個,我<=行( dt ) ,我++,
數據中心= dt : ID [我] ;
rand_integerc = dt : rand_integer [我] ;
rand_numberc = dt : rand_number [我] ;
rand_datetimec =格式( dt : rand_datetime [我] , “m/d/yh:m:s” ) ;
rand_stringC = dt : rand_string [我] ;
sql語句= sql語句||評估插入(
" INTO .FYI_RANDOM(ID, RAND_INTEGER, RAND_NUMBER, RAND_DATETIME, RAND_STRING)
值(^idc^,^rand_integerc^,^rand_numberc^,
to_date('^rand_datetimec^', 'MM/DD/YYYY HH:MI:SS AM'),
'^rand_stringc^')
“ ) ;
如果(模組(我,最大插入數) == 0 ,
// 奇怪 - INSERT ALL INTO 最後需要一個 SELECT 語句 - 使用一個虛擬的
sql語句= sql語句|| “從雙重中選擇 1” ;
執行sql (數據庫, sql語句) ;
sql語句= “全部插入” ;
) ;
如果(模組(我, 200 ) == 0 ,
標題( “插入” ||字符(我) || “ 記錄” ) ;
等待( 0 ) ;
) ;
) ;
// 看看是否還有什麼事情要做
如果( sql語句!= “全部插入” ,
執行sql (數據庫, sql語句) ;
) ;
關閉數據庫連接(數據庫) ;
t1 =滴答秒() ;
打印( t1 - t2 ) ;
標題(消除) ;
等待( 0 ) ;
這全部插入命令實際上並不是那麼新——我在網上找到的示例顯示它在 Oracle 9 中工作。以下是一些包含更多信息的鏈接:
https://www.techonthenet.com/oracle/questions/insert_rows.php
sql - 在 Oracle 中進行多行插入的最佳方式? - 堆棧溢出
Re: 將數據表結果集寫入已有的Oracle表這有效!
非常感謝你的幫助,我真的很感激
Re: 將數據表結果集寫入已有的Oracle表也許您的 JMP 表列是數字的?這就是錯誤消息所指示的。此外,您還缺少某些列的單引號。嘗試用 CHAR 函數包裝每一列。如果那仍然不起作用,請打印出您的 sql_statement 變量。
當前數據表( dt ) ;
數據庫=創建數據庫連接(
"DRIVER={Oracle instantclient11_1};DBQ=DBASE;UID=UNAME;SPWD=PWORD;"
) ;
為了(我= 1個,我<= N行( dt ) ,我++,
sql語句= “插入 SCHEMA.TBL_TABLE” ||
“(COL1、COL2、COL3、COL4、COL5、COL6、COL7、COL8)” ||
“值(” || "'" ||
字符(柱子( 1個)[我]) || "', '" ||字符(柱子( 2個)[我]) || "', '" ||
字符(柱子( 3個)[我]) || "', '" ||字符(柱子( 4個)[我]) || "', '" ||
字符(柱子( 5個)[我]) || "', '" ||字符(柱子( 6個)[我]) || "', '" ||
字符(柱子( 7 )[我]) || "', '" ||字符(柱子( 8個)[我]) || "')" ;
打印( sql語句) ;
執行SQL (數據庫, sql語句) ;
) ;
關閉數據庫連接(數據庫) ;
Re: 將數據表結果集寫入已有的Oracle表你好,
我曾嘗試使用此方法但出現錯誤,該錯誤似乎是由於串聯造成的。
表中的所有列都是 VARCHAR2,從 Oracle 開發人員的角度來看,串聯看起來很好。
你能幫我完成終點線嗎?
參數應該是“Concat”的訪問或評估中的字符,參數錯誤(列(5) )
在以下腳本中,錯誤標記為 /*###*/
當前數據表( dt );
dbc = 創建數據庫連接(
"DRIVER={Oracle instantclient11_1};DBQ=DBASE;UID=UNAME;SPWD=PWORD;"
);
For( i = 1, i <= N Rows( dt ), i++,
sql_statement = "INSERT INTO SCHEMA.TBL_TABLE" || /*###*/
“(COL1、COL2、COL3、COL4、COL5、COL6、COL7、COL8)” || /*###*/
"VALUES(" || /*###*/"'" || /*###*/Column( 1 ) || /*###*/"', " || /*###*/
“'” || /*###*/列(2) || /*###*/"', " || /*###*/"'" || /*###*/
專欄( 3 ) || /*###*/"', " || /*###*/列(4) || /*###*/", " || /*###*/
專欄( 5 ) || /*###*/", " || /*###*/列(6) || /*###*/", " || /*###*/
專欄( 7 ) || /*###*/", " || /*###*/"'" || /*###*/列(8) || /*###*/
"') " /*###*/;
執行 SQL(dbc, sql_statement);
);
關閉數據庫連接(dbc);
Re: 將數據表結果集寫入已有的Oracle表杰拉德,
你快到了。要添加多條記錄,您必須遍歷 JMP 表中的行並發出單獨的 INSERT 語句。
dt = rftmdl [ 1個][錶框( 3個)] <<製作組合數據表( “Tbl_Combined” ) ;
當前數據表( dt ) ;
數據庫=創建數據庫連接( “DRIVER={Oracle instantclient11_1};DBQ=DBNAME;UID=USER;SPWD=PASS;” ) ;
為了(我= 1個,我<=行( dt ) ,我++,
sql語句=
“插入 SCHEMA.TBL_TABLE” ||
“(col1,col2,col3,col4,col5,col6,col7,col8)” ||
“值(” ||
"'" ||柱子( 1個)[我] || "', " ||
"'" ||柱子( 2個)[我] || "', " ||
"'" ||柱子( 3個)[我] || "', " ||
柱子( 4個)[我] || ", " ||
柱子( 5個)[我] || ", " ||
柱子( 6個)[我] || ", " ||
柱子( 7 )[我] || ", " ||
"'" ||柱子( 8個)[我] || "')" ;
// JMP 將向插入語句添加提交。
執行SQL (數據庫, sql語句) ;
) ;
關閉數據庫連接(數據庫) ;
要引用單個表格單元格,您可以使用如下語法:
柱子( 1個)[ 3個] ; // 引用當前數據表中的單元格,在第一列,第3行
柱子( dt , 5個)[ 7 ] ; // 變量 dt 引用的表格第 5 列第 7 行中的單元格
柱子( dt , “世界” )[ 2個] ; // 在 dt 引用的表中名為 World 的列中的單元格,第 2 行。這是我最常使用的語法
:世界[ 2個] ; // 當前數據表中第 2 行 World 列中的單元格。
祝你好運!
彼得
Re: 將數據表結果集寫入已有的Oracle表非常感謝您的回复。
使用我輸入的值,如何指定它們來自數據表?
我試過簡單地使用 column(1) 等,但這不起作用。 我來自 PL/SQL 背景,所以我的大腦說 dt.column(1) 但這不起作用。
你能澄清一下嗎?
dt=rftmdl[1][Table Box(3)] << make combined datatable("Tbl_Combinied");
sql_statement =
“插入 SCHEMA.TBL_TABLE” ||
“(col1,col2,col3,col4,col5,col6,col7,col8)” ||
“值(” ||
“'” ||專欄(1) || "', " ||
“'” ||專欄(2)|| "', " ||
“'” ||專欄(3)|| "', " ||
專欄(4)|| ", " ||
第(5)列|| ", " ||
專欄(6)|| ", " ||
專欄(7)|| ", " ||
“'” ||專欄(8) || "')";
dbc = 創建數據庫連接("DRIVER={Oracle in instantclient11_1};DBQ=DBNAME;UID=USER;SPWD=PASS;");
// JMP 將向插入語句添加提交。
執行 SQL(dbc, sql_statement);
關閉數據庫連接(dbc);
此外,如果您知道任何有用的鏈接或 JMP 腳本指南,所有幫助都會被大大接受。
再次感謝。
Re: 將數據表結果集寫入已有的Oracle表如果您使用的是 JMP 10,下面介紹瞭如何插入記錄。請注意,DSN_STRING 是我的數據庫的連接字符串。另請注意,SQL 字符串必須在一個連續的行上,沒有註釋。
sql語句=
“插入 myschema.mytable” ||
“(one_col,second_col,third_col)” ||
“值(” ||
"'" ||第一個值|| "', " ||
"'" ||第二值|| "', " ||
"'" ||第三值|| "')" ;
數據庫=創建數據庫連接( dsn_string ) ;
// JMP 將向插入語句添加提交。
執行SQL (數據庫, sql語句) ;
關閉數據庫連接(數據庫) ;
// 在 JMP 8 或 9 中只需使用:
// 打開數據庫(dsn_string, sql_statement);