【问题标题】:'[Error] Execution (8: 3): ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at line 5' in the following plsql'[Error] Execution (8: 3): ORA-06502: PL/SQL: numeric or value error: string buffer too small ORA-06512: at line 5' in the following plsql
【发布时间】:2014-07-23 05:07:57
【问题描述】:

谢谢大家,我已从 varchar2(10) 修改为 varchar2(20) 并删除了执行立即语句中的 column 关键字,然后程序正在执行

declare
coldate varchar2(20);
colname varchar2(20);
begin
    coldate :='varchar2(10)';
    colname :='smaple';
    execute immediate 'alter table smap1 add column '||colname ||' '||coldate ;
end;

如果我想动态获取值,我使用了以下代码

declare
coldate varchar2(20):=&coldate;
colname varchar2(20):=&colname;
begin
   execute immediate 'alter table smap1 add '||colname ||' '||coldate ;
end;

然后我得到错误

 [Error] Execution (11: 23): ORA-06550: line 2, column 23:
 PLS-00330: invalid use of type name or subtype name
 ORA-06550: line 2, column 9:
 PL/SQL: Item ignored
 ORA-06550: line 3, column 23:
 PLS-00201: identifier 'SMAPLE' must be declared
 ORA-06550: line 3, column 9:
 PL/SQL: Item ignored
 ORA-06550: line 6, column 45:
 PLS-00320: the declaration of the type of this expression is incomplete or malformed
 ORA-06550: line 6, column 1:
 PL/SQL: Statement ignored

【问题讨论】:

  • 'varchar2(10)' 是 12 个字符,您只保留 10 个字符。
  • 谢谢大家,我已从 varchar2(10) 修改为 varchar2(20) 但我在程序中遇到另一个错误 ORA-00904: : invalid identifier ORA-06512: at line 7
  • 请参阅下面的答案,并在此处添加详细信息。
  • 谢谢,我已经修改了代码,但仍然执行的查询出现错误
  • 您可能希望在创建问题时添加所有详细信息,而不是随时添加复杂性。删除我的答案,因为它是您原始问题的答案,而不是更新后的答案。

标签: oracle plsql oracle11g


【解决方案1】:
    declare
    coldate varchar2(20);
    colname varchar2(20);
    begin
        coldate :='varchar2(10)';
        colname :='smaple';
        execute immediate 'alter table smap1 add column '||colname ||' '||coldate ;
    end;

    This query wont work as syntactically its not correct.
    Please try this as it will help you definitely

    declare
    coldate varchar2(20):='varchar2(20)';
    colname varchar2(20):='Newadd';
    begin
       execute immediate 'alter table <tablename> add '||colname ||' '||coldate ;
    end;
-- And to use dynamically input values Please try this

SET DEFINE ON;
declare
coldate varchar2(20):='&DATATYPE';
colname varchar2(20):='&COL_NAME';
begin
   execute immediate 'alter table emp add '||colname ||' '||coldate ;
end;

【讨论】:

  • 谢谢你这个程序正在运行。我想在程序运行时读取列名和数据类型
  • 嗨使用这个SET DEFINE ON;声明coldate varchar2(20):='&DATATYPE'; colname varchar2(20):='&COL_NAME';开始执行立即 'alter table emp add '||colname ||' '||冷日期;结束;
【解决方案2】:

下面会解决它:

coldate varchar2(12);
colname varchar2(20);
begin
    coldate :='varchar2(10)';

【讨论】:

    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2020-03-10
    相关资源
    最近更新 更多