这是我写的一个存储过程`请问这样写有错吗`?
 strSql VARCHAR2(3000);
BEGIN  
      strSql :='SELECT a 1,b 2 FROM dual cm'
      strSql := strSql ||' inner join (SELECT c 1 FROM dual
                                      WHERE paracode = ''1''
                                      )ST
                                      ON ST.c=cm.a';
     报错啊``请问能这样写吗`?
   

解决方案 »

  1.   


    把ora错误贴出来,看下。
      

  2.   


    如果一个`NUMBER   一个varchar2``  怎么转呢?????是不是这个问题``
      

  3.   


    declare
           strSql VARCHAR2(3000); 
    BEGIN  
          strSql :='SELECT a 1,b 2 FROM dual cm'; 
          strSql := strSql ||' inner join (SELECT c 1 FROM dual 
                                          WHERE paracode = ''1'' 
                                          )ST 
                                          ON ST.c=cm.a'; 
    end;写成这样,在我的plsql里面可以编译通过。你的问题:
    1,没有declare开头声明变量
    2,begin没有end;来结尾。
      

  4.   

    CREATE OR REPLACE PROCEDURE SP_TEST_3 IS
      /*
      测试存储过程
      */
      strSql VARCHAR2(3000);
    BEGIN  strSql := 'SELECT a 1,b 2 FROM dual cm';
      strSql := strSql || ' inner join (SELECT c 1 FROM dual
                                          WHERE paracode = ''1''
                                          )ST
                                          ON ST.c=cm.a';END;
      

  5.   

    如果一个cm 的a是`NUMBER  一个st 的c 是varchar2`会不会报错啊````  
      

  6.   

    你可以把表中的字段类型统一转换成 VARCHAR2型,方法如下--新建一列,用于备份数据
    alter table 表名 add  备份列 INTEGER;--将修改列的数据备份到备份列
    update 表名 set 备份列= 修改列; --清空修改列
    update 表名 set 修改列=null; --修改修改列的类型为小数
    alter table 表名 modify 修改列 NUMBER(10,2);
    update 属性表名 set dbit_id='DECIMAL' ,attr_collength=10,attr_colscale=2 where attr_id= 修改列对应的属性的ID
    --将备份列的值更新到修改列
    update 表名 set 修改列=备份列; --删除备份列
    alter table 表名 drop column 备份列;
      

  7.   

    你好,你可以先从数据库中把字段由NUMBER型改为varchar2
      

  8.   

    存储过程中执行查询sql也不能直接显示,要用into或用游标
      

  9.   

    --如果cm 的a是`NUMBER st 的c 是varchar2`,可以转化一下,前提是varchar2存储的也是数字形式的串declare
      strSql VARCHAR2(3000);
    BEGIN
      strSql := 'SELECT a 1,b 2 FROM dual cm';
      strSql := strSql || ' inner join (SELECT c 1 FROM dual
                                          WHERE paracode = ''1''
                                          )ST
                                          ON to_number(ST.c)=cm.a';
    END; 
      

  10.   

    这两个个子查询有问题
    SELECT a 1,b 2 FROM dual
    SELECT c 1 FROM dual 
    直接去环境中查询下就知道了
      

  11.   

    问题找到了```是PL/SQL版本太低````晕死`~!