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';是没有问题的。该如何把默认值放入变量中呢?
解决方案 »
- 一个表对应多个表,并且都是多对一的关系,请教表如何设计
- 望高手帮忙?如果能解决该问题本人愿拿1000RMB酬谢,决不食言!!!!!!!!
- 创表参数initial和next的问题?请高手解释
- 还算简单的问题---要求使用自表关联和exists两种方法实现
- 为什么我show user的时候显示user 为“”?
- txlicenhe(马可), onejune4450(中文字符) 还有点问题
- 谁有TOAD的注册码,分少了再加都可以.
- 如何解决Oracle的启动问题
- 请各位开一下游标的使用是否正确
- oracle11奇怪的问题:连接不上远程的数据库,但本地的可以连。。
- oracle 带参数的存储过程!
- Tode检索结果中文显示乱码
这样定义变量再试试.
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;
我希望能取到字段的默认值,在参数为空的情况下,用默认值来更新。
这个字段是varchar(1),默认值为0。但是通过DATA_DEFAULT取得的默认值有四位。
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)
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,而是其他任意字符,则不会报错
……
) ;
DATA_DEFAULT是long型,没办法用substr,也不能replace,也没有trim。
给个解决方法吧。不然我就只能用if做判断,分开写insert语句了。
我找了,貌似没有对应的函数啊。
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>
用to_char(D_FLG_07JYUN) insert 很正常