Oracle 如何使用executeimmediate添加列

Oracle 如何使用executeimmediate添加列,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我只想使用executeimmediate添加列,但我得到一个错误。请让我知道此PL/SQL块是否正确 create or replace procedure add_column (xyz in varchar2, abc in varchar2) is begin EXECUTE IMMEDIATE 'alter table ' || 'xyz add abc varchar2(20)'; dbms_output.put_line('New column added');

我只想使用executeimmediate添加列,但我得到一个错误。请让我知道此PL/SQL块是否正确

create or replace procedure add_column (xyz in varchar2, abc in varchar2) is
begin 
    EXECUTE IMMEDIATE 'alter table ' || 'xyz add abc varchar2(20)';
    dbms_output.put_line('New column added');
end;

exec add_column ('students', 'time');

error: Error starting at line : 8 in command -
BEGIN add_column ('students', 'time'); END;

ORA-00942: table or view does not exist
ORA-06512: at "HR.ADD_COLUMN", line 4
ORA-06512: at line 1

您需要将字符串concatation用作:

EXECUTE IMMEDIATE 'alter table ' || xyz || ' add ' || abc || ' varchar2(20)';
另外,
DBMS\u ASSERT
可用于检查表和列的有效名称,如下所示

EXECUTE IMMEDIATE 'alter table ' || sys.DBMS_ASSERT.SQL_OBJECT_NAME(xyz) 
                   || ' add ' || sys.DBMS_ASSERT.SQL_OBJECT_NAME(abc) || ' varchar2(20)';

此处,
xyz
abc
将替换为输入参数名称。

完成。非常感谢您的帮助。:)