具有动态 table 名称的 Oracle PL/SQL 存储过程
Oracle PL/SQL stored procedure with dynamic table name
我试图在此处使 table 名称动态化,但它没有向 table 插入任何记录。有人可以帮我看看有什么问题吗?谢谢!
'''
Create or replace procedure input_records AS
CurTerm varchar2(4) := '1122';
CAR_TERM_HISTORY varchar2(30) := 'CAR_TERM_HISTORY_' || CurTerm;
stmt_str varchar2(1000) := 'insert into' || CAR_TERM_HISTORY
|| '(select sysdate as date_created,
date_loaded,
strm,
withdraw_code,
withdraw_reason,
withdraw_date,
unt_taken_fa,
unt_passd_fa,
tot_taken_fa,
tot_passd_fa,
tot_taken_fa_gpa,
tot_grd_points_fa,
billing_career,
cur_gpa,
cum_gpa,
registered,
acad_level_proj,
acad_level_bot,
acad_level_eot '||
'from IMS.EADTERM
where strm = CurTerm
)';
BEGIN
execute immediate stmt_str ;
END input_records;
'''
where strm = CurTerm
我假设你的 CurTerm
应该是某种变量?你是说:
where strm = ' || CurTerm || '...
像这样构建 SQL 时,请确保无法进行 SQL 注入。
您需要将您的 where 条件更改为 -
'from IMS.EADTERM
where strm = ' || CurTerm || '
)';
感谢大家的评论。正如@ MT0 指出的那样,插入后我错过了 space。
我试图在此处使 table 名称动态化,但它没有向 table 插入任何记录。有人可以帮我看看有什么问题吗?谢谢! '''
Create or replace procedure input_records AS
CurTerm varchar2(4) := '1122';
CAR_TERM_HISTORY varchar2(30) := 'CAR_TERM_HISTORY_' || CurTerm;
stmt_str varchar2(1000) := 'insert into' || CAR_TERM_HISTORY
|| '(select sysdate as date_created,
date_loaded,
strm,
withdraw_code,
withdraw_reason,
withdraw_date,
unt_taken_fa,
unt_passd_fa,
tot_taken_fa,
tot_passd_fa,
tot_taken_fa_gpa,
tot_grd_points_fa,
billing_career,
cur_gpa,
cum_gpa,
registered,
acad_level_proj,
acad_level_bot,
acad_level_eot '||
'from IMS.EADTERM
where strm = CurTerm
)';
BEGIN
execute immediate stmt_str ;
END input_records;
'''
where strm = CurTerm
我假设你的 CurTerm
应该是某种变量?你是说:
where strm = ' || CurTerm || '...
像这样构建 SQL 时,请确保无法进行 SQL 注入。
您需要将您的 where 条件更改为 -
'from IMS.EADTERM
where strm = ' || CurTerm || '
)';
感谢大家的评论。正如@ MT0 指出的那样,插入后我错过了 space。