當前位置:首頁 » 編程語言 » 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()));
}