create or replace
FUNCTION JDT_UDC_Desc
(
V_SY IN VARCHAR2,
V_RT IN VARCHAR2,
V_KY IN VARCHAR2
)
RETURN VARCHAR2
AS
V_DL01 VARCHAR2(30);
BEGIN
EXECUTE IMMEDIATE 'select drdl01
from PRODCTL.F0005
WHERE DRSY = V_SY
AND DRRT = V_RT
AND ltrim(rtrim(drky)) =ltrim(rtrim(V_KY))'
INTO V_DL01
using V_SY,V_RT,V_KY;
END;
コンパイル。私は、実行をクリックし、値の下に入力します。ORA-00904無効な識別子 - ダイナミックOracle関数
V_SY ='00',
V_RT = '01',
V_KY='04';
そして、私はエラーの下に取得
ORA-00904 V_KY無効な識別子
誰も私は、このエラーの理由を理解することはできますか?
まず、ここでは動的SQLを使用する理由はありません。動的SQLに頼らざるを得ないことは稀です。静的SQLを使用すると、コードはより効率的でメンテナンス性が向上します。 –
@JustinCave私は、この関数が静的変数ではなく動的変数を使用したいと考えています。値V_SY、V_RT、V_KYは動的変数です。私は静的にはうまくいくと思っていますが、アプリケーションの目的には必要です – Simi
これは動的SQLを使う必要はありません。あなたが照会したいテーブルの名前または返すカラムが実行時にしか分かっていない場合は、動的SQLを使用します。静的SQLは、バインド変数の値が実行時に決定される問合せを完全に処理できます。実際、実際のアプリケーションのすべての静的SQLの99.99%は、実行時まで値がわからない変数/パラメータを使用します。 –