データ テーブルの結果セットを既存の Oracle テーブルに書き込む<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />やあ、
私はJMPスクリプトを初めて使用します。 Oracle テーブルから読み込むスクリプトを作成しました。 Fit_Model をデータに適用し (Oracle ではこれを複製できなかったため、JMP が必要です)、それを Oracle に書き戻したいと考えています。
現在、私は dt3<
これによりテーブルが作成されますが、新しいテーブルを作成する代わりに、既存のテーブルに INSERT INTO できる必要があります。
私はJMPスクリプトが初めてで、JMPスクリプトのマニュアルで答えが見つからないので、助けていただければ幸いです。
ありがとう、
Re: データ テーブルの結果セットを既存の Oracle テーブルに書き込むこのスレッドをいくつかの新しい情報で更新したかっただけです。Oracle テーブルに複数の挿入 (~8000) を実行しようとしていたところ、一度に 1 つのレコードを挿入するときにパフォーマンスの問題が発生しました。「トリック」は、すべてを挿入指図。以下のコードは、一度に 200 レコードを挿入します。
dt =データ表( 「ランダムデータ」 ) ;
dsn_string = "Driver={Oracle in OraClient11g64};Dbq=;UID=;PWD=;" ;
dbc =データベース接続を作成する( dsn_string ) ;
sql_statement =
"\[CREATE TABLE <スキーマ>.FYI_RANDOM
(ID番号、
RAND_INTEGER NUMBER、
RAND_NUMBER NUMBER、
RAND_DATETIME 日付、
RAND_STRING VARCHAR2(80))]\" ;
SQLを実行( dbc 、 sql_statement ) ;
// テーブルから行を削除します (テストを繰り返すため)
SQLを実行( dbc 、 「切り捨てテーブル .fyi_random」 ) ;
t2 =ティック秒() ;
max_inserts = 200 ; // 一度に 200 個の挿入を行います
sql_statement = 「すべて挿入」 ;
ために(私= 1 、私<=ナロー( dt ) 、私++、
IDC = 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_statement = sql_statement ||エバリンサート(
" INTO <スキーマ>.FYI_RANDOM(ID, RAND_INTEGER, RAND_NUMBER, RAND_DATETIME, RAND_STRING)
VALUES(^idc^, ^rand_integerc^, ^rand_numberc^,
to_date('^rand_datetimec^', 'MM/DD/YYYY HH:MI:SS AM'),
'^rand_stringc^')
" ) ;
もしも(モッド(私、 max_inserts ) == 0 、
// 奇妙です - INSERT ALL INTO は最後に SELECT ステートメントを必要とします - ダミーのものを使用してください
sql_statement = sql_statement || 「デュアルから1を選択」 ;
SQLを実行( dbc 、 sql_statement ) ;
sql_statement = 「すべて挿入」 ;
) ;
もしも(モッド(私、 200 ) == 0 、
キャプション( 「入れた」 ||チャー(私) || " 記録" ) ;
待って( 0 ) ;
) ;
) ;
// やるべきことが残っているかどうかを確認する
もしも( sql_statement != 「すべて挿入」 、
SQLを実行( dbc 、 sql_statement ) ;
) ;
データベース接続を閉じる( dbc ) ;
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 ) ;
dbc =データベース接続の作成(
"DRIVER={instantclient11_1 の Oracle};DBQ=DBASE;UID=UNAME;SPWD=PWORD;"
) ;
ために(私= 1 、私<= N 行( dt ) 、私++、
sql_statement = "SCHEMA.TBL_TABLE に挿入" ||
"(COL1、COL2、COL3、COL4、COL5、COL6、COL7、COL8)" ||
"値(" || 「」 ||
チャー(桁( 1 )[私])) || 「'、'」 ||チャー(桁( 2 )[私])) || 「'、'」 ||
チャー(桁( 3 )[私])) || 「'、'」 ||チャー(桁( 4 )[私])) || 「'、'」 ||
チャー(桁( 5 )[私])) || 「'、'」 ||チャー(桁( 6 )[私])) || 「'、'」 ||
チャー(桁( 7 )[私])) || 「'、'」 ||チャー(桁( 8 )[私])) || "')" ;
印刷する( sql_statement ) ;
SQL を実行する( dbc 、 sql_statement ) ;
) ;
データベース接続を閉じる( dbc ) ;
Re: データ テーブルの結果セットを既存の Oracle テーブルに書き込むやあ、
これで作業を試みましたが、連結が原因と思われるエラーが発生しました。
テーブル内のすべての列は VARCHAR2 であり、連結は Oracle 開発者の観点からは問題ないように見えます。
私をフィニッシュラインに乗せるのを手伝ってくれませんか?
'Concat' のアクセスまたは評価では、引数は文字でなければなりません。不正な引数 ( Column( 5 ) )
次のスクリプトでは、/*####*/ でマークされたエラー
現在のデータ テーブル ( dt );
dbc = データベース接続の作成(
"DRIVER={instantclient11_1 の Oracle};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 ) || /*###*/"'," || /*###*/
"'" || /*###*/Column( 2 ) || /*###*/"'," || /*###*/"'" || /*###*/
列( 3 ) || /*###*/"'," || /*###*/Column( 4 ) || /*###*/", " || /*###*/
列( 5 ) || /*###*/", " || /*###*/Column( 6 ) || /*###*/", " || /*###*/
コラム( 7 ) || /*###*/", " || /*###*/"'" || /*###*/Column( 8 ) || /*###*/
"') " /*###*/;
SQL を実行します( dbc, sql_statement );
);
データベース接続を閉じます ( dbc );
Re: データ テーブルの結果セットを既存の Oracle テーブルに書き込むジェラルド、
あなたはほとんどそこにいます。複数のレコードを追加するには、JMP テーブルの行をループして、個別の INSERT ステートメントを発行する必要があります。
dt = rftmdl [ 1 ][テーブルボックス( 3 )] <<結合されたデータテーブルを作成する( "Tbl_Combined" ) ;
現在のデータ テーブル( dt ) ;
dbc =データベース接続の作成( "DRIVER={instantclient11_1 の Oracle};DBQ=DBNAME;UID=USER;SPWD=PASS;" ) ;
ために(私= 1 、私<=ナロー( dt ) 、私++、
sql_statement =
"SCHEMA.TBL_TABLE に挿入" ||
"(col1、col2、col3、col4、col5、col6、col7、col8)" ||
"値(" ||
「」 ||桁( 1 )[私] || "'、" ||
「」 ||桁( 2 )[私] || "'、" ||
「」 ||桁( 3 )[私] || "'、" ||
桁( 4 )[私] || "、" ||
桁( 5 )[私] || "、" ||
桁( 6 )[私] || "、" ||
桁( 7 )[私] || "、" ||
「」 ||桁( 8 )[私] || "')" ;
// JMP は挿入ステートメントにコミットを追加します。
SQL を実行する( dbc 、 sql_statement ) ;
) ;
データベース接続を閉じる( dbc ) ;
個々のテーブル セルを参照するには、次のような構文を使用できます。
桁( 1 )[ 3 ] ; // 現在のデータ テーブルの最初の列、3 行目のセルを参照します
桁( dt 、 5 )[ 7 ] ; // 変数 dt によって参照されるテーブルの列 5、行 7 のセル
桁( dt 、 "世界" )[ 2 ] ; // dt が参照するテーブルの World という名前の列、行 2 のセル。これは私が最も頻繁に使用する構文です
:世界[ 2 ] ; // 現在のデータ テーブルの列 World、行 2 のセル。
幸運を!
ピーター
Re: データ テーブルの結果セットを既存の Oracle テーブルに書き込む返信ありがとうございます。
入力した値を使用して、それらがデータ テーブルからのものであることをどのように指定できますか?
column(1) などを単純に使用してみましたが、これは機能しません。 私は PL/SQL のバックグラウンドを持っているので、私の脳は dt.column(1) と言っていますが、これは機能しません。
明確にしていただけますか?
dt=rftmdl[1][Table Box(3)] << make combined datatable("Tbl_Combinied");
sql_statement =
"INSERT INTO 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 文字列は 1 つの連続した行である必要があり、コメントは含まれないことに注意してください。
sql_statement =
"myschema.mytable に挿入" ||
"(one_col, second_col, third_col) " ||
"値(" ||
「」 ||最初の値|| "'、" ||
「」 ||秒値|| "'、" ||
「」 ||サード値|| "')" ;
dbc =データベース接続の作成( dsn_string ) ;
// JMP は挿入ステートメントにコミットを追加します。
SQL を実行する( dbc 、 sql_statement ) ;
データベース接続を閉じる( dbc ) ;
// JMP 8 または 9 では、次のように使用します。
// Open Database(dsn_string, sql_statement);