[PHP-users 24001] Re: PHP→ORACLEへの配列受渡

Naomasa Numajiri naonuma @ ubiquitous.co.jp
2004年 12月 27日 (月) 18:56:27 JST


こんにちは
(質問そのものは分かりませんが)

; 「SQLの発行は1回にしたい。」
; という要望があり、
; 配列を直接ORACLEに渡したいのですが
; どうもうまくいきません。

配列の要素毎にデータを渡す場合は、OCIExecute()を要素毎に
実行する必要はありますが、OCIPrepare()やOCIBindByName()は
そのような場合でも1回で済むと思いますよ。

一番重いのはOCIPrepare()で発生するSQL文の解析コストだと
思うので、それが「1回にしたい」理由なら気にしなくてもいいのでは?

# ちなみに、使っている関数はOracle7互換の関数のようですね。
# 使ったことはありませんが同じだと思います。

ちなみに、
;     ora_bind($cur1,"WK_ID",":WK_ID",1000);
;     ora_bind($cur1,"WK_NAME",":WK_NAME",1000);
ora_bind()の使い方はこれで間違いないですか?

参考になれば

-- ぬ

On Mon, 27 Dec 2004 18:42:47 +0900
Yagi.Tomohiro @ toshiba-sol.co.jp (八木 智弘) wrote:

; いつも利用させて頂いております。八木と申します。
; 
; 現在、あるプロジェクトで
; 「画面からEXCELをアップロードし
;  取得したデータをORACLEにINSERTする
;  処理」を作成しております。
; 
; EXCELからデータを取得する部分は
; Spreadsheet_excel_readerといった
; ライブラリを使用し、できたのですが
; 取得した配列データをORACLEに
; 渡せません。
; 
; 「SQLの発行は1回にしたい。」
; という要望があり、
; 配列を直接ORACLEに渡したいのですが
; どうもうまくいきません。
; 
; なにかよい知恵がありましたら、
; 教えていただけないでしょうか。
; 
; 
; ・環境
;  Solaris 5.8
;  Oracle   8.1.7
;   PHP      4.3.3
; 
; ・データ(test.xls)
; 1	八木
; 2	智弘
; 3	TEST
; 
; PL/SQL:
; 
; TYPE v_array is TABLE OF varchar2(8000) INDEX BY BINARY_INTEGER;
; CREATE OR REPLACE procedure proc_place
;     (P_ID            in out v_array,
;      P_NAME          in out v_array)
; is
; begin
;     for i in 1..P_ID.count loop
;         DBMS_OUTPUT.PUT_LINE(P_ID(i));
;         DBMS_OUTPUT.PUT_LINE(P_NAME(i));
;     END LOOP;
; end;
; 
; PHP:
;  <?php
; 
;     //oracleログイン(excelaryにデータは格納)
;     for($i=0;$i<=$row-1;$i++){
;        $WK_ID[$i+1]   =$excelary[$i][1];
;        $WK_NAME[$i+1] =$excelary[$i][2];
;     }
;     $conn1=ora_logon(ユーザ@SID,パスワード);
;     $sql="BEGIN proc_place(:WK_ID,:WK_NAME);END;";    
;     $cur1= ora_open($conn1);
;     $ret1= ora_parse($cur1,$sql);
;     ora_bind($cur1,"WK_ID",":WK_ID",1000);
;     ora_bind($cur1,"WK_NAME",":WK_NAME",1000);
;     ora_exec($cur1);
;     
;     //oracleログアウト    
;     Ora_Close($cur1);
;     Ora_Logoff($conn1);
;     
; ?>
; 
; 八木 智弘
; 
; ----
; 八木 智弘  Yagi.Tomohiro @ toshiba-sol.co.jp
; *--------------------------------------------*
; 株式会社システムエグゼ 
; SI推進部  八木  智弘
; 
; ◆◆住所と電話番号が変わりました◆◆
; 〒104-0033 東京都中央区新川2-3-1 
;            セントラルスクエア2F
; TEL:03-5542-5591 FAX:03-5542-5594
; 
;  *--------------------------------------------*
; 
; ----
; 八木 智弘  Yagi.Tomohiro @ toshiba-sol.co.jp
; *--------------------------------------------*
; 株式会社システムエグゼ 
; SI推進部  八木  智弘
; 
; ◆◆住所と電話番号が変わりました◆◆
; 〒104-0033 東京都中央区新川2-3-1 
;            セントラルスクエア2F
; TEL:03-5542-5591 FAX:03-5542-5594
; 
;  *--------------------------------------------*
; 
; ----
; 八木 智弘  Yagi.Tomohiro @ toshiba-sol.co.jp
; *--------------------------------------------*
; 株式会社システムエグゼ 
; SI推進部  八木  智弘
; 
; ◆◆住所と電話番号が変わりました◆◆
; 〒104-0033 東京都中央区新川2-3-1 
;            セントラルスクエア2F
; TEL:03-5542-5591 FAX:03-5542-5594
; 
;  *--------------------------------------------*
; _______________________________________________
; PHP-users mailing list  PHP-users @ php.gr.jp
; http://ns1.php.gr.jp/mailman/listinfo/php-users
; PHP初心者のためのページ - 質問する前にはこちらをお読みください
; http://www.php.gr.jp/php/novice.php3



PHP-users メーリングリストの案内