SELECT DATA_DEFAULT
  INTO D_FLG_07JYUN
  FROM  USER_TAB_COLUMNS
  WHERE TABLE_NAME='CM1' AND COLUMN_NAME='FLG_07JYUN';报ora-06553错误。单独执行  SELECT DATA_DEFAULT
  FROM  USER_TAB_COLUMNS
  WHERE TABLE_NAME='CM1' AND COLUMN_NAME='FLG_07JYUN';是没有问题的。该如何把默认值放入变量中呢?

解决方案 »

  1.   

    D_FLG_07JYUN CM1.FLG_07JYUN%type;
    这样定义变量再试试.
      

  2.   


    set serveroutput ondeclare
    D_FLG_07JYUN USER_TAB_COLUMNS.DATA_DEFAULT%type;
    begin
      SELECT DATA_DEFAULT INTO D_FLG_07JYUN
      FROM  USER_TAB_COLUMNS
      WHERE TABLE_NAME='CM1' AND COLUMN_NAME='FLG_07JYUN';
      dbms_output.put_line('D_FLG_07JYUN='||D_FLG_07JYUN);
    exception when others then
      dbms_output.put_line('can not find data !');
    end;
      

  3.   

    哦,错了,DATA_DEFAULT是long类型的.
      

  4.   

    用USER_TAB_COLUMNS.DATA_DEFAULT%type定义的话,执行没有问题。但insert的时候,类型不匹配了。
      

  5.   

    不光是转类型的问题呀,报ora-06553的错误。
    我希望能取到字段的默认值,在参数为空的情况下,用默认值来更新。
      

  6.   

    to_char(D_FLG_07JYUN,'0'),insert的时候报ora-06553错误。
    这个字段是varchar(1),默认值为0。但是通过DATA_DEFAULT取得的默认值有四位。
      

  7.   

    SQL> DECLARE
      2  V user_tab_columns.data_default%TYPE;
      3  BEGIN
      4  SELECT data_default INTO V from user_tab_columns where table_name='ST' and column_name='SEX';
      5  INSERT INTO TT1(NAME) VALUES(V);
      6  COMMIT;
      7  EXCEPTION
      8  WHEN OTHERS THEN
      9  DBMS_OUTPUT.PUT_LINE('NO DATA');
     10  END;
     11  /PL/SQL 过程已成功完成。SQL> SELECT * FROM TT1
      2  /ID         NAME
    ---------- --------------------
               '男'SQL> DESC TT1
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     ID                                                 VARCHAR2(10)
     NAME                                               VARCHAR2(20)
      

  8.   

    D_FLG_07 USER_TAB_COLUMNS.DATA_DEFAULT%type;BEGIN
      SELECT
      DATA_DEFAULT
      INTO D_FLG_07
      FROM  USER_TAB_COLUMNS
      WHERE TABLE_NAME='CM1' AND COLUMN_NAME='FLG_07';  INSERT
      INTO
        CM1
        (
          ……
          FLG_07,
          ……
        )
        VALUES
        (
          ……
          D_FLG_07,--这里如果不用D_FLG_07,而是其他任意字符,则不会报错
          ……
        ) ;
      

  9.   

    long型没有substr函数啊。不然我还trim呢。
      

  10.   

    LZ是想先取出默认值,然后再插入CM1表里吧?取出的默认值长度是多少?向表中插入默认值应该是几位的?LZ没有立清楚啊!
      

  11.   

    先把它转换成string类型再trim不就可以了吗?
      

  12.   

    我不是说了吗,字段是1位的,用DATA_DEFAULT取出来的有4位。默认值是0,实际取得的是:'0' 。
    DATA_DEFAULT是long型,没办法用substr,也不能replace,也没有trim。
    给个解决方法吧。不然我就只能用if做判断,分开写insert语句了。
      

  13.   

    扶额,long型怎么转varchar2呀?
    我找了,貌似没有对应的函数啊。
      

  14.   

     
    SQL> select t.DATA_DEFAULT  from USER_TAB_COLUMNS t where t.TABLE_NAME='T_DEFAULT';
     
    DATA_DEFAULT
    --------------------------------------------------------------------------------
    0SQL> declare
      2   v_long long;
      3   v_var  varchar2(1000);
      4  begin
      5   select t.DATA_DEFAULT into v_long from USER_TAB_COLUMNS t where t.TABLE_NAME='T_DEFAULT';
      6   select cast(v_long as varchar2(1000)) into v_var from dual;
      7   dbms_output.put_line(length(v_var));
      8  end ;
      9  /
     
    1
     
    PL/SQL procedure successfully completed
     
    SQL> 
      

  15.   

    我试了一下
    用to_char(D_FLG_07JYUN) insert 很正常