insert tablename (COL1,COL2) VALUES ('TEST',NVL('',DEFAULT))
这句话为什么不对,如果COL2可能为空 ,可能不为空,当为空时,使用默认值。 这个insert语句应该怎么写?
DEFAULT 不能代表默认值吗?
14 个解决方案
#1
没人知道么?
#2
用2条语句写,
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 tablename (COL1,COL2)
select COL1,COL2 from ta where COL2 is not null;
insert tablename (COL1)
select COL1 from ta where COL2 is null;
#3
insert语句??
你 要 插入一条数据,那COL2肯定是空的,没有什么的好判断的。
如果COL2当为空时,使用默认值, nvl(COL2,DEFAULT)
如果是更新的话
update tablename set COL2=nvl(COL2,DEFAULT) where COL1='TEST'
#4
NVL('',DEFAULT)
的两个参数都必需是字符型的
其实你不用这么写的,直接插入一个值,另一个值会自动默认的!
的两个参数都必需是字符型的
其实你不用这么写的,直接插入一个值,另一个值会自动默认的!
#5
insert tablename (COL1) VALUES ('TEST');
直接这样就可以了。
直接这样就可以了。
#6
楼主的需求一步是很难实现的,你可以首先不管是不是空值都进行插入,之后再将空值的替换为默认值
update temp_table set col2 = default where col2 is null
update temp_table set col2 = default where col2 is null
#7
提示不是说的很明白了吗?
nvl的第二参数只能是表达式或者常量,不能是这些default的保留字。
nvl的第二参数只能是表达式或者常量,不能是这些default的保留字。
#8
给tableName 的 COL2字段使用Default值就行了;
INSERT tablename (COL1,COL2) values ('TEST','你要插入的COL2值');
INSERT tablename (COL1,COL2) values ('TEST','你要插入的COL2值');
#9
给你写个函数实现
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>
#10
楼主的要求一条SQL是不行的
具体实现应该是这样
首先为col2建立默认值,且设置为不能为空
然后先插入col1的值,当col2有另外的值时,再更新col2
insert into tablename(col1) values('Test');
在你的代码里做一个判断,如果对应于col2的变量或控件的值不为空
再执行如下代码
update tablename set col2='123' where col1='Test';
当然这就要求col1是主键
具体实现应该是这样
首先为col2建立默认值,且设置为不能为空
然后先插入col1的值,当col2有另外的值时,再更新col2
insert into tablename(col1) values('Test');
在你的代码里做一个判断,如果对应于col2的变量或控件的值不为空
再执行如下代码
update tablename set col2='123' where col1='Test';
当然这就要求col1是主键
#11
如果你的COL2字段设定了默认值的话,你直接插入就好了。如果你插入的值为空,ORACLE会自动用默认值代替的~
#12
code=SQL]insert tablename (COL1,COL2) VALUES ('TEST','') ;
insert tablename (COL1,COL2) VALUES ('TEST','123') ;[[/code]
就直接插入就行了啊,不为空就插入非空值,为空数据库会默认default值的。
insert tablename (COL1,COL2) VALUES ('TEST','123') ;[[/code]
就直接插入就行了啊,不为空就插入非空值,为空数据库会默认default值的。
#13
insert tablename (COL1,COL2) VALUES ('TEST',DEFAULT)
#14
在设计表结构的时候可以指定col2字段的default值;
另外参考nvl函数的用法
另外参考nvl函数的用法
#1
没人知道么?
#2
用2条语句写,
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 tablename (COL1,COL2)
select COL1,COL2 from ta where COL2 is not null;
insert tablename (COL1)
select COL1 from ta where COL2 is null;
#3
insert语句??
你 要 插入一条数据,那COL2肯定是空的,没有什么的好判断的。
如果COL2当为空时,使用默认值, nvl(COL2,DEFAULT)
如果是更新的话
update tablename set COL2=nvl(COL2,DEFAULT) where COL1='TEST'
#4
NVL('',DEFAULT)
的两个参数都必需是字符型的
其实你不用这么写的,直接插入一个值,另一个值会自动默认的!
的两个参数都必需是字符型的
其实你不用这么写的,直接插入一个值,另一个值会自动默认的!
#5
insert tablename (COL1) VALUES ('TEST');
直接这样就可以了。
直接这样就可以了。
#6
楼主的需求一步是很难实现的,你可以首先不管是不是空值都进行插入,之后再将空值的替换为默认值
update temp_table set col2 = default where col2 is null
update temp_table set col2 = default where col2 is null
#7
提示不是说的很明白了吗?
nvl的第二参数只能是表达式或者常量,不能是这些default的保留字。
nvl的第二参数只能是表达式或者常量,不能是这些default的保留字。
#8
给tableName 的 COL2字段使用Default值就行了;
INSERT tablename (COL1,COL2) values ('TEST','你要插入的COL2值');
INSERT tablename (COL1,COL2) values ('TEST','你要插入的COL2值');
#9
给你写个函数实现
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>
#10
楼主的要求一条SQL是不行的
具体实现应该是这样
首先为col2建立默认值,且设置为不能为空
然后先插入col1的值,当col2有另外的值时,再更新col2
insert into tablename(col1) values('Test');
在你的代码里做一个判断,如果对应于col2的变量或控件的值不为空
再执行如下代码
update tablename set col2='123' where col1='Test';
当然这就要求col1是主键
具体实现应该是这样
首先为col2建立默认值,且设置为不能为空
然后先插入col1的值,当col2有另外的值时,再更新col2
insert into tablename(col1) values('Test');
在你的代码里做一个判断,如果对应于col2的变量或控件的值不为空
再执行如下代码
update tablename set col2='123' where col1='Test';
当然这就要求col1是主键
#11
如果你的COL2字段设定了默认值的话,你直接插入就好了。如果你插入的值为空,ORACLE会自动用默认值代替的~
#12
code=SQL]insert tablename (COL1,COL2) VALUES ('TEST','') ;
insert tablename (COL1,COL2) VALUES ('TEST','123') ;[[/code]
就直接插入就行了啊,不为空就插入非空值,为空数据库会默认default值的。
insert tablename (COL1,COL2) VALUES ('TEST','123') ;[[/code]
就直接插入就行了啊,不为空就插入非空值,为空数据库会默认default值的。
#13
insert tablename (COL1,COL2) VALUES ('TEST',DEFAULT)
#14
在设计表结构的时候可以指定col2字段的default值;
另外参考nvl函数的用法
另外参考nvl函数的用法