何が原因なのかわからないという別の問題があります。私はOracleを初めて使用し、2つの文字列を連結することに取り組んでいます。DateStart、DateStop、およびその他の変数を取得して、それらをSQLstmtに変換する関数があります。関数は正常にコンパイルされていましたが、実行時に次のエラーが発生します。
ORA-06502:PL / SQL:数値または値のエラー:文字列バッファが小さすぎます。ORA-06512の行..。
最初は、文字列の1つに引用符がないのではないかと思いましたが、1つを印刷したときに関数がエラーを生成しなかったため、両方の文字列は問題ありません。両方を組み合わせた場合にのみ問題が発生しました。見落としているのは明らかかもしれませんが、演算子「||」の代わりにconcatを試しましたが、問題の原因を特定できませんでした。誰かが以前にこの問題に遭遇したことがあるなら、私が間違っていたことのヒントを教えていただければ幸いです。
これが問題の原因となった関数です。問題をゼロにできるように、他のすべての無関係なコードを削除しました。関数は正しくコンパイルされましたが、実行時に問題がありました。
ありがとう!
create or replace
FUNCTION ABC(
DateStart IN VARCHAR2 ,
DateStop IN VARCHAR2 ,
ZipCode IN VARCHAR2 ,
PracticeID IN VARCHAR2)
RETURN VARCHAR2
IS
v_code NUMBER;
v_errm VARCHAR2(64);
sqlstmt VARCHAR2(1000);
sqlstmt2 VARCHAR2(500);
sConditionClause VARCHAR2(500);
s_Quote VARCHAR(1) := chr(39);
BEGIN
sqlstmt2 :='SELECT TO_CHAR("Date", ''yyyy-mm-dd'') AS "Date" ,
substr(trim("Postal"),1,5) AS "ZipCode" ,
count ("Patient") AS "Total" ';
sConditionClause := ' FROM "ABC_TABLE" WHERE "Date">=To_Date('
||s_Quote || trim(DateStart) ||s_Quote
||','
||s_Quote||'mm/dd/yyyy'||s_Quote||')AND "Date"<=To_Date('
||s_Quote || trim(DateStop) ||s_Quote
||','||s_Quote||'mm/dd/yyyy'||s_Quote||') ';
sqlstmt := trim(sqlstmt2)||trim(sConditionClause);
RETURN sqlstmt;
END;