1

Codeigniter2でOracleストアドプロシージャを実行するのに問題が発生したのは1時間でした。CI+ストアドプロシージャの適切なドキュメントを見つけることができません。

私のストアドプロシージャ:

CREATE OR REPLACE 
PROCEDURE SP_DISTRICT_INSERT(P_DST_NAME VARCHAR2, FLAG VARCHAR2 Default '0',P_USER_ID Number) AS

PKEY NUMBER:=0;

         BEGIN

             SELECT MAX(NVL(DST_ID,0))+1 INTO PKEY FROM DISTRICT ;

      INSERT INTO DISTRICT(DST_ID, DST_NAME, USER_ID, ENTERED_DATE, FLAG) VALUES(PKEY,P_DST_NAME,P_USER_ID,SYSDATE ,FLAG);

     COMMIT ;



EXCEPTION

        WHEN OTHERS THEN

 RAISE_APPLICATION_ERROR (-20001,PKEY|| 'INVALID_NO'|| P_DST_NAME|| 'DATAMISMATCH'|| SQLERRM, TRUE) ;

END SP_DISTRICT_INSERT ;

そして、このようにモデルでストアドプロシージャを実行しました

$ins=$this->db->query("call SP_DISTRICT_INSERT('abcdxyz',1,1)");

エラーを表示しているページ

Error Number:

call SP_DISTRICT_INSERT('abcdxyz',1,1)

Filename: D:\xampp\htdocs\..\database\DB_driver.php

Line Number: 330

でも、

Navicatから直接プロシージャを呼び出すと、機能します

どんな助けでもありがたいです。

PS私はCodeigniter2とOracle11gを使用しています

ありがとう

4

2 に答える 2

0

問題はデータベースのフィールド長でした。シナリオは、フォームの送信後、入力文字列が のような Unicode 形式に変換されるというものです。したがって、データベース フィールドの長さが 10 で、4 文字の文字列を入力すると、4 文字が Unicode 形式に変換されると約 24 文字になり、データベース フィールドで許可されている長さを超えるため、プロシージャはエラーを返しました。

于 2012-09-13T06:02:24.587 に答える