insert语句,使用默认值的问题。
insert tablename (COL1,COL2) VALUES ('TEST',NVL('',DEFAULT))
这句话为什么不对,如果COL2可能为空 ,可能不为空,当为空时,使用默认值。 这个insert语句应该怎么写?
DEFAULT 不能代表默认值吗?
insert tablename (COL1,COL2) VALUES ('TEST',NVL('',DEFAULT))
这句话为什么不对,如果COL2可能为空 ,可能不为空,当为空时,使用默认值。 这个insert语句应该怎么写?
DEFAULT 不能代表默认值吗?
insert tablename (COL1,COL2)
select COL1,COL2 from ta where COL2 is not null;insert tablename (COL1)
select COL1 from ta where COL2 is null;
insert语句??
你 要 插入一条数据,那COL2肯定是空的,没有什么的好判断的。
如果COL2当为空时,使用默认值, nvl(COL2,DEFAULT)
如果是更新的话update tablename set COL2=nvl(COL2,DEFAULT) where COL1='TEST'
的两个参数都必需是字符型的
其实你不用这么写的,直接插入一个值,另一个值会自动默认的!
直接这样就可以了。
update temp_table set col2 = default where col2 is null
nvl的第二参数只能是表达式或者常量,不能是这些default的保留字。
INSERT tablename (COL1,COL2) values ('TEST','你要插入的COL2值');
SQL> create table tt
2 (
3 id int ,
4 name varchar(20) default 'watson'
5 )
6 /表已创建。SQL> CREATE OR REPLACE FUNCTION GetDefaultData (
2 p_tname IN VARCHAR2,
3 p_cname IN VARCHAR2
4 )
5 RETURN VARCHAR2
6 AS
7 l_cursor INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR;
8 l_n NUMBER;
9 l_long_val VARCHAR2 (4000);
10 l_long_len NUMBER;
11 l_buflen NUMBER := 4000;
12 l_curpos NUMBER := 0;
13 BEGIN
14 DBMS_SQL.PARSE (l_cursor, '
15 SELECT data_default
16 FROM USER_TAB_COLUMNS utc
17 WHERE UPPER(utc.table_name) = ''' || p_tname || '''
18 AND UPPER(utc.COLUMN_NAME) = ''' || p_cname || '''
19 ', DBMS_SQL.native);
20 DBMS_SQL.DEFINE_COLUMN_LONG (l_cursor, 1);
21 l_n := DBMS_SQL.EXECUTE (l_cursor);
22
23 IF (DBMS_SQL.FETCH_ROWS (l_cursor) > 0) THEN
24 DBMS_SQL.COLUMN_VALUE_LONG (l_cursor, 1, l_buflen, l_curpos, l_long_val, l_long_len);
25 END IF;
26 DBMS_SQL.CLOSE_CURSOR (l_cursor);
27
28 RETURN l_long_val;
29 END GetDefaultData;
30 /函数已创建。SQL> create or replace procedure p_t(input_val varchar2)
2 is
3 Begin
4 insert into tt values(1,nvl(input_val,GetDefaultData(upper('tt'),upper('name'))));
5 commit;
6 End;
7 /过程已创建。SQL> exec p_t('');PL/SQL 过程已成功完成。SQL> select * from tt; ID NAME
---------- --------------------
1 'watson'SQL>
具体实现应该是这样
首先为col2建立默认值,且设置为不能为空
然后先插入col1的值,当col2有另外的值时,再更新col2
insert into tablename(col1) values('Test');
在你的代码里做一个判断,如果对应于col2的变量或控件的值不为空
再执行如下代码
update tablename set col2='123' where col1='Test';
当然这就要求col1是主键
insert tablename (COL1,COL2) VALUES ('TEST','123') ;[[/code]就直接插入就行了啊,不为空就插入非空值,为空数据库会默认default值的。
另外参考nvl函数的用法