我编写了一个PL / SQL函数,并且正在使用动态SQL来执行创建触发器语句,如下所示:-
CREATE OR REPLACE FUNCTION register_driver1(driver_name IN VARCHAR, pass_word IN VARCHAR) RETURN NUMBER AS
sql_stmt VARCHAR2(500);
driver_id NUMBER;
new_view_name VARCHAR(50); --<-----Line 4
BEGIN
--function statements
sql_stmt := 'CREATE OR REPLACE TRIGGER reg_vehicle
INSTEAD OF INSERT ON '||new_view_name||
' FOR EACH ROW
DECLARE
vehicle_id NUMBER;
BEGIN
vehicle_id := vehicle_ids.nextval
INSERT INTO Vehicles VALUES(:NEW.Model, :NEW.Seats, :NEW.reg_no, vehicle_id, '||driver_id||');
END;';
EXECUTE IMMEDIATE sql_stmt; --<-----Line 32
--Remaining function body
END;
/
此处,变量new_view_name, driver_id
在此代码段上方定义。 Vehicle
是表(Model, Seats, Reg_no, vehicel_id, driver_id)
,reg_vehicle(Model, Seats, Reg_no)
是具有特定Vehicle
的driver_id
个的视图。
[vehicle_ids
是在过程外部创建的序列。
上面显示了EXECUTE IMMEDIATE
行的编译错误。正确的方法是什么?
使用某些driver_name和password调用函数时显示的错误:-
ORA-24344: success with compilation error ORA-06512: at "ADMIN.REGISTER_DRIVER1", line 32 ORA-06512: at line 4
[我编写了一个PL / SQL函数,并且正在使用动态SQL执行创建触发器语句,如下所示:-创建或替换功能register_driver1(driver_name IN VARCHAR,pass_word IN VARCHAR)...