将数据表结果集写入已有的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);