当前位置:首页 » 编程语言 » sql语句setnull
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql语句setnull

发布时间: 2022-08-08 01:47:38

‘壹’ 请问oracle的把全部空值的字段修改为0的sql语句怎么写

这个只能写存储过程了。

思路:

1、遍历user_tables里面所有的表

2、遍历每一个表的所有列

3、update操作

这个要循环嵌套一个循环才能完成。

存储过程代码如下(未测试):


DECLARECURSORC_JOBIS
SELECTTABLE_NAMEFROMUSER_TABLES;
C_ROWC_JOB%ROWTYPE;
VAR_TABLE_NAMEUSER_TABLES.TABLE_NAME%TYPE;
BEGIN
OPENC_JOB;
LOOP
FETCHC_JOBINTOC_ROW;
EXITWHENC_JOB%NOTFOUND;
VAR_TABLE_NAME:=C_ROW.TABLE_NAME;
DECLARE
CURSORC_JOB_1IS
SELECTCOLUMN_NAMEFROMUSER_TAB_COLUMNSWHERETABLE_NAME=VAR_TABLE_NAME;
C_ROW_1C_JOB_1%ROWTYPE;
VAR_COLUMN_NAMEUSER_TAB_COLUMNS.COLUMN_NAME%TYPE;
BEGIN
OPENC_JOB_1;
LOOP
FETCHC_JOB_1INTOC_JOB_1;
EXITWHENC_JOB_1%NOTFOUND;
VAR_COLUMN_NAME:=C_ROW.COLUMN_NAME;
UPDATEVAR_TABLE_NAMESETVAR_COLUMN_NAME=0WHEREVAR_COLUMN_NAMEISNULL;
ENDLOOP;
CLOSEC_JOB_1;
ENDLOOP;
COMMIT;
CLOSEC_JOB;
END;
ENDUpdateTableSetNull;

‘贰’ 数据库有什么语句

--数据操作
SELECT --从数据库表中检索数据行和列
INSERT --向数据库表添加新数据行
DELETE --从数据库表中删除数据行
UPDATE --更新数据库表中的数据
--数据定义
CREATE TABLE --创建一个数据库表
DROP TABLE --从数据库中删除表
ALTER TABLE --修改数据库表结构
CREATE VIEW --创建一个视图
DROP VIEW --从数据库中删除视图
CREATE INDEX --为数据库表创建一个索引
DROP INDEX --从数据库中删除索引
CREATE PROCEDURE --创建一个存储过程
DROP PROCEDURE --从数据库中删除存储过程
CREATE TRIGGER --创建一个触发器
DROP TRIGGER --从数据库中删除触发器
CREATE SCHEMA --向数据库添加一个新模式
DROP SCHEMA --从数据库中删除一个模式
CREATE DOMAIN --创建一个数据值域
ALTER DOMAIN --改变域定义
DROP DOMAIN --从数据库中删除一个域
--数据控制
GRANT --授予用户访问权限
DENY --拒绝用户访问
REVOKE --解除用户访问权限
--事务控制
COMMIT --结束当前事务
ROLLBACK --中止当前事务
SET TRANSACTION --定义当前事务数据访问特征
--程序化SQL
DECLARE --为查询设定游标
EXPLAN --为查询描述数据访问计划
OPEN --检索查询结果打开一个游标
FETCH --检索一行查询结果
CLOSE --关闭游标
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句
DESCRIBE --描述准备好的查询

还有很多,你参考http://www.ark88.com/Article/Class31/Class32/2003-12-30/Article_20031230201228.html

‘叁’ 为什么PreparedStatement.setNull要求则sqlType

为了获得最大的兼容性。根据规范,有些数据库(比如Oracle )不允许未定义类型的NULL被发送到基础数据源。

‘肆’ sql数据库更新语句

sql更新数据库语句
update语句用于更新修改指定记录的数据,其用法为:
update
tbl_name
set
col_name1=value1,
col_name2=value2,

where
conditions
对符合条件的记录,更新修改指定字段的值。若没有where条件限定,则对所有记录进行更新修改。例如:

4.23
更新记录

‘伍’ sql创建外键语句

--
创建测试主表.
ID
是主键.
CREATE
TABLE
test_main
(
id
INT,
value
VARCHAR(10),
PRIMARY
KEY(id)
);
--
创建测试子表.
CREATE
TABLE
test_sub
(
id
INT,
main_id
INT,
value
VARCHAR(10),
PRIMARY
KEY(id)
);
默认外键约束方式
ALTER
TABLE
test_sub
ADD
CONSTRAINT
main_id_cons
FOREIGN
KEY
(main_id)
REFERENCES
test_main;
DELETE
CASCADE
方式
--
创建外键(使用
ON
DELETE
CASCADE
选项,删除主表的时候,同时删除子表)
ALTER
TABLE
test_sub
ADD
CONSTRAINT
main_id_cons
FOREIGN
KEY
(main_id)
REFERENCES
test_main
ON
DELETE
CASCADE;
UPDATE
CASCADE方式
--
创建外键(使用
ON
UPDATE
CASCADE
选项,更新主表的主键时候,同时更新子表外键)
ALTER
TABLE
test_sub
ADD
CONSTRAINT
main_id_cons
FOREIGN
KEY
(main_id)
REFERENCES
test_main
ON
UPDATE
CASCADE;
SET
NULL方式
--
创建外键(使用
ON
DELETE
SET
NULL
选项,删除主表的时候,同时将子表的
main_id
设置为
NULL)
ALTER
TABLE
test_sub
ADD
CONSTRAINT
main_id_cons
FOREIGN
KEY
(main_id)
REFERENCES
test_main
ON
DELETE
SET
NULL;

‘陆’ sql server怎样删除外键约束

1.首先,我们使用SQLSERVER2008打开需要删除外键约束的表,点击左侧的“dbo”通道项,选择“setclick”。

注意事项:

可以双击键约束来添加外键约束,它有四个不同的选项:CASCADE、SETNULL、NOACTION、restricted。

1.级联:删除或更新父表中相应的行,并自动删除或更新表中匹配的行。[在删除CANSCADE和更新CANSCADE都支持InnoDB。

2.SETNULL:删除或更新父表中对应的行,并将子表中的外键列设置为空。注意,这些外键列没有设置为NOTNULL。InnoDB支持删除集空值和更新集空值。

3.无操作:InnoDB拒绝删除或更新父表。

4.限制:拒绝删除或更新父表。

‘柒’ 利用反射机制拼写SQL语句

你想insert还是select啊,新手吧,好多错哦

我想你的意思是想根据一个java bean类和table来生成insert语句,比如写一个UserBean(里面有get/set方法),建一个表usertable,然后自动生成insert语句,给你个示范:

/**
* 获取sql和params
*
* @param bean
* @param table
* @return
*/
public static Map getInsertSql(Object bean, String table) {
String sql = "insert into table (";
String values = "";
// params是插入的参数值,用于PreparedStatement.set...
ArrayList params = new ArrayList();
Map map = new HashMap();

// 取出bean里的所有字段
Class beanClass = bean.getClass();
Field[] fields = beanClass.getDeclaredFields();

// 将map里的值赋给bean
try {
for (int i = 0; i < fields.length; i++) {
String fieldname = fields[i].getName();
if (i == 0)
sql += fieldname;
else
sql += ", " + fieldname;

// 调用get方法获取变量值
Class fieldtype = fields[i].getType();
String methodname = getMethodName(fieldname, "get");
Method method = beanClass.getMethod(methodname);
Object fieldvalue = method.invoke(bean);
if (i == 0)
values += "?";
else
values += ", ?";
params.add(fieldvalue);
}
} catch (Exception e) {
e.printStackTrace();
}
sql += ") values(" + values + ")";

map.put("sql", sql);
map.put("params", params);
return map;
}

/**
* 获取字段的get/set方法名
*
* @param fieldname
* @return
*/
private static String getMethodName(String fieldname, String type) {
char upper = Character.toUpperCase(fieldname.charAt(0));
return type + upper + fieldname.substring(1);
}

/**
* 设置参数:用于变量绑定中参数的设置
*
* @param pst
* @param params
* @throws SQLException
*/
public static void setStatementParameters(PreparedStatement pst,
Object[] params) throws SQLException {
for (int i = 0; i < params.length; ++i) {
Object obj = params[i];
if (null == obj) {
pst.setNull(i + 1, Types.CHAR);
} else if (obj instanceof java.sql.Date) {
pst.setDate(i + 1, (java.sql.Date) obj);
} else if (obj instanceof java.sql.Timestamp) {
pst.setTimestamp(i + 1, (java.sql.Timestamp) obj);
} else {
pst.setObject(i + 1, obj);
}
}
}

public static void main(String[] args) throws SQLException {
UserBean user = new UserBean();
//user.setName(name);
//.....给user赋值
Map map = getInsertSql(user, "user_tab");
String sql = (String)map.get("sql");
ArrayList params = (ArrayList)map.get("params");
Connection conn = null;
PreparedStatement pstmt = null;
//....获取conn
pstmt = conn.prepareStatement(sql);
setStatementParameters(pstmt, params.toArray());
pstmt.execute();
pstmt.close();
conn.close();
}

‘捌’ 用sql语句查询结果插入到新的数据库中

如果是oracle,用存储过程可以解决这个问题:
create procere p_1 is
v_old_id number(5); --假设类别是数值型
v_tmp varchar2(40);
begin
setnull(v_old_id);
for c1 in(selct * from 表a order by 类别)
loop
if v_old_id is null or v_old_id<>c1.类别 then
v_old_id=c1.类别;
if v_old_id<>c1.类别 then
insert into 表B
values(v_old_id,substr(v_temp,1,length(v_temp)-1)
;
commit
;
v_temp:=c1.内容||','
;
end if;
else
v_temp:=v_temp||c1.内容||','
;
end if
;
end loop
;
commit
;
end
;

‘玖’ C语言,数据库

嵌入SQL的基本特点是:
1、每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。
2、如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”,在Fortran中必须有续行符。其他语言也有相应规定。
3、每一条嵌入SQL语句都有结束符号,如:在C中是“;”。
4、嵌入SQL语句的关键字不区分大小写。
5、可以使用“/*….*/”来添加注释。

从上面这个例子看出,INFORMIX数据库的嵌入SQL语句的格式同其他数据库基本相同。但是,它也有它自己本身的一些特点。本节把重点放在INFORMIX数据库所独有的一些语句或处理方式。
5.2 宿主变量
宿主变量就是在嵌入式SQL语句中引用主语言说明的程序变量。如:
EXEC SQL connect to :hostvar;
1)、定义宿主变量
方法1:采用BEGIN DECLARE SECTION 和END DECLARE SECTION之间给主变量说明。如:
EXEC SQL BEGIN DECLARE SECTION;
char fname[ FNAME_LEN + 1 ];
char lname[ LNAME_LEN + 1 ];
EXEC SQL END DECLARE SECTION;
方法2:在每个变量的数据类型前加上“$”。如:
$int hostint;
$double hostdbl;
ESQL/C对宿主变量的大小写敏感。但是,ESQL/C的关键字、语句标志符、游标名大小写不敏感。在SQL语句中,除了使用“:”来标志宿主变量外,还可以使用“$”。当然,“:”是ANSI标准。如:EXEC SQL connect to $hostvar。对于注释,可以使用“--”,也可以使用标准的“/*…*/”。
2)、宿主变量和NULL
方法1:使用指示符变量。
方法2:使用函数risnull()和rsetnull()。
3)、指示符变量
大多数程序设计语言(如C)都不支持NULL。所以对NULL的处理,一定要在SQL中完成。我们可以使用主机指示符变量来解决这个问题。在嵌入式SQL语句中,宿主变量和指示符变量共同规定一个单独的SQL类型值。指示变量和前面宿主变量之间用一个空格相分隔。如:
EXEC SQL select lname, company
into :name INDICATOR :nameind, :comp INDICATOR :compind
nameind是name变量的指示符,而compind是comp变量的指示符。
可以通过以下三种方法使用指示符变量:
方法1、使用INDICATOR关键字。
:hostvar INDICATOR :indvar
方法2、
:hostvar :indvar
方法3、使用$符号。
$hostvar $indvar。
无论采用哪种方法,都是实现指示符变量的作用。即:当宿主变量hostvar应该返回NULL时,指示符变量为-1。当宿主变量hostvar应该返回不是NULL而且无需截断时,指示符变量为0。当返回值太大而需要截断时,指示符变量是截断前数据的长度。SQLSTATE会返回01004错误信息。请看下面这个例子:
EXEC SQL BEGIN DECLARE SECTION;
char name[16];
char comp[20];
short nameind;
short compind;
EXEC SQL END DECLARE SECTION;
EXEC SQL select lname, company
into :name INDICATOR :nameind, :comp INDICATOR :compind
from customer
where customer_num = 105;
如果对应105的company为NULL,则compind小于0,如果lname的结果大于15个字节,那么name包含前15个字符。
4)、宿主变量的数据类型
INFROMIX ESQ/C的宿主变量数据类型除了标准C的数据类型外,可以是它自己定义的数据类型。如:
lvarchar数据类型
EXEC SQL BEGIN DECLARE SECTION;
varchar varc_name[n + 1];
EXEC SQL END DECLARE SECTION;
lint8数据类型
EXEC SQL BEGIN DECLARE SECTION;
int8 int8_var1;
ifx_int8_t int8_var2;
EXEC SQL BEGIN DECLARE SECTION;
lfixchar数据类型
EXEC SQL BEGIN DECLARE SECTION;
boolean flag;
fixchar my_boolflag;
int id;
EXEC SQL END DECLARE SECTION;
lDecimal数据类型
#define DECSIZE 16
struct decimal
{
short dec_exp;
short dec_pos;
short dec_ndgts;
char dec_dgts[DECSIZE];
};
typedef struct decimal dec_t;
lDatetime数据类型
EXEC SQL include datetime;
EXEC SQL BEGIN DECLARE SECTION;
datetime year; /* will cause an error */
datetime year to day year, today; /* ambiguous */
EXEC SQL END DECLARE SECTION;
lInterval hour等数据类型
EXEC SQL BEGIN DECLARE SECTION;
interval day(3) to day accrued_leave, leave_taken;
interval hour to second race_length;
interval scheled;
EXEC SQL END DECLARE SECTION;
l其他数据类型
EXEC SQL BEGIN DECLARE SECTION;
loc_t my_simple_lo;
EXEC SQL END DECLARE SECTION;
my_simole_lo.loc_loctype = LOCMEMORY;
l在INFORMIX数据库中,'\0'表示为NULL。如:
id = 1;
flag = '\0'; /* valid boolean assignment to FALSE */
EXEC SQL insert into table2 values (:id, :flag); /* inserts FALSE */
在以SQL为基础的DBMS支持的数据类型与程序设计语言支持的数据类型之间有很大差别。如果你通过宿主变量从数据库取值,或者通过宿主变量向数据库插入值,都存在数据类型转换的问题。

‘拾’ 一道C语言的题目,真心没有头绪

#include<stdio.h>
#include<stdlib.h>
#definemaxlen20
typedefstruct{
charch[maxlen];
intlast;
}Sequenlist;
typedefstruct{
chardata[maxlen];
inttop;
}Seqstack;
Sequenlist*Sqlsetnull(){//建空顺序表
Sequenlist*L;
L=(Sequenlist*)malloc(sizeof(Sequenlist));
L->last=-1;
returnL;
}
Seqstack*Setstack(){//建空栈
Seqstack*S;
S=(Seqstack*)malloc(sizeof(Seqstack));
S->top=-1;
returnS;
}
Seqstack*Pushstack(charx,Seqstack*S){//入栈
S->top++;
S->data[S->top]=x;
returnS;
}
Seqstack*Popstack(Seqstack*S){//出栈
S->top--;
returnS;
}
charGettop(Seqstack*S){//取栈顶
returnS->data[S->top];
}
Sequenlist*Pushlist(){//将字符串存入顺序表中
Sequenlist*L;
L=Sqlsetnull();
chara;
printf("请输入字符串,并以'#'结束! ");
a=getchar();
while(a!='#'){
L->last++;
L->ch[L->last]=a;
a=getchar();
}
returnL;
}
intCompare(Sequenlist*L){//判断是不是回文
inti,n;
n=(L->last+1)/2;
Seqstack*S;
S=Setstack();
for(i=0;i<n;i++){
S=Pushstack(L->ch[L->last],S);
L->last--;
}
while(L->last!=S->top)
L->last--;
while(L->ch[L->last]==S->data[S->top]&&L->last!=-1){
L->last--;
S=Popstack(S);
}
if(L->last==-1)//是回文返回1
return1;
else//不是回文返回0
return0;
}
voidResultout(inta){//结果输出
if(a==1)
printf("该字符串是回文! ");
if(a==0)
printf("该字符串不是回文! ");
}
voidmain(){
Resultout(Compare(Pushlist()));
}