【问题标题】:Declaring multiple variable oracle sql script声明多变量oracle sql脚本
【发布时间】:2013-09-19 21:33:10
【问题描述】:

使用 oracle 11g 64bit 和 sqldeveloper 4.0。尝试运行以下 sql 脚本:

variable  v_sak_id NUMBER; 
variable  v_idNum varchar; 
exec :v_idNum := 'A1111200';
select sak_id into :v_sak_id from MemerId where idNum= :v_idNum;

收到错误信息:

用法:VAR[IABLE] [ [ NUMBER |字符 | CHAR (n [CHAR|BYTE]) | VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) | NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR | BINARY_FLOAT | BINARY_DOUBLE ] ]

匿名块已完成错误从第 6 行开始在命令中 - 选择 sak_id 到 :v_sak_id from MemerId where idNum= :v_idNum 错误 报告 - SQL 错误:ORA-01006:绑定变量不存在 01006. 00000 - “绑定变量不存在” *原因:
*行动:

有什么帮助吗?

【问题讨论】:

  • 这项工作:where idNum='v_idNum';

标签: sql oracle


【解决方案1】:

SELECT ... INTO ... 是 PL/SQL 语法,而不是 SQL。由于您在 SQL Developer 中运行,您可以只使用select sak_id from MemerId where idNum= :v_idNum;,系统会提示您输入 v_idNum 的值。使用绑定变量的其他执行将保留以前的值,或者您可以更改它。

【讨论】:

    【解决方案2】:

    试试类似的东西

    variable  v_sak_id NUMBER; 
    variable  v_idNum varchar; 
    exec :v_idNum := 'A1111200';
    
    begin
       select sak_id into :v_sak_id from MemerId where idNum= :v_idNum;
    end;
    

    也就是说,select ... into 构造/语句需要包含在 PL/SQL 块中,这是通过将语句嵌入到 begin .. end 中来实现的。

    【讨论】:

    • 我想避免使用 pl/sql,因为我有很多选择需要使用 sak_id 打印
    • 那么您需要更具体地询问并制定您想要的内容。
    【解决方案3】:
    1. 当您声明一个字符串变量时,您必须指定该变量的大小。

    2. 虽然到目前为止varcharvarchar2 是同义词,但请不要使用varchar 使用varchar2 数据类型。 Oracle 计划将varchar 数据类型重新定义为单独的数据类型。

    3. 因为它已经被告知 select into 语句用于 Pl/SQL,所以你应该把你的 select 语句放在一个 begin end 块中或使用 exec 执行你的 select 语句命令,它在后台将您的 select 语句包装在 begin end 块中:

    示例(我假设有一个错字,表的名称应该是memBerid,但无论如何。保持原样。):

    create table  memerid(
     sak_id number,
     idNum varchar2(123)
    );
    
    insert into MemerId(sak_id, idNum)
      values(1, 'A1111200');
    
    commit;
    
    variable  v_sak_id number; 
    variable  v_idNum  varchar2(123); 
    
    exec :v_idNum := 'A1111200';
    exec select sak_id into :v_sak_id from MemerId  where idNum= :v_idNum;
    
    print v_sak_id;
    

    结果:

    table MEMERID created.
    1 rows inserted.
    committed.
    anonymous block completed
    anonymous block completed
    
    V_SAK_ID
    -
    1
    

    【讨论】:

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