sql動態長度
① insertselectvarchar長度限制
insertselectvarchar長度限制是10。
當varchar超過限制長度時,1.如果當前的sql模式為寬松模式,那麼將會按照從前往後的順序,對字元串進行截斷,並提示一個警告;2.如果當前的SQL模式為嚴格模式,那麼將會報出一個錯誤。
從SQLServer2005開始,引入了varchar(max)/nvarchar(max)數據類型,表中可不使用LOB數據類型而突破單列8000/4000字元的限制,動態SQL也可以拼接得更長;但查看這類字元的時候,在某些地方,字元長度的限制仍然存在,比如:
單列:SSMS里返回的列值。
動態SQL:print命令列印字元時。
② 一條sql語句最長可以多長
不同的資料庫甚至相同資料庫的不同版本都可能不一樣,具體可以查詢聯機幫助,或參閱產品規格說明。總的來說SQL語句的最大長度限制都是很大的,編寫SQL語句一般不需要考慮語句的長度問題。例如ACCESS的SQL最大長度約為6,4000個、MSSQL為65,536 * 網路數據包。像這樣的長度,足夠你寫下長篇大論了。但是話要說回來,一個太長的語句其執行效率變得會低下,盡量避免編寫太長和過於復雜的SQL語句還是非常必要的。
③ sql語句是不是有長度限制
看你是不是動態SQL。如果動態SQL,會用字元串記錄的。字元串的變數有長度限制。平時的SQL,你再長都不會有限制。
④ 關於SQL長度問題
int 這里說的不對 char 說的正確!
1 int 4
int2 是2位元組 有符號整型, 符號佔1位,餘下15位2進制位表示數值 。最大數正數是 0x7fff
int4 是4位元組 有符號整型 符號佔1位,餘下31位2進制位表示數值 。最大數正數是 0x7fffffff
int8 是8位元組 有符號整型 符號佔1位,餘下63位2進制位表示數值 。
2 char 20
代表能容下20的字元
10個漢字!
⑤ oracle動態執行SQL字元串,字元串最大的長度是多少
定義成varchar2的話最大的長度就是 32767,最好不要超過32000
⑥ SQL 語句 最大長度限制 DB2如何修改最大長度限制
home/datamart$ db2 get db cfg|grep HEAP
Sort heap thres for shared sorts (4KB) (SHEAPTHRES_SHR) = AUTOMATIC
Sort list heap (4KB) (SORTHEAP) = AUTOMATIC
Database heap (4KB) (DBHEAP) = AUTOMATIC
Utilities heap size (4KB) (UTIL_HEAP_SZ) = 103816
SQL statement heap (4KB) (STMTHEAP) = AUTOMATIC
Default application heap (4KB) (APPLHEAPSZ) = AUTOMATIC
Statistics heap size (4KB) (STAT_HEAP_SZ) = AUTOMATIC
修改 STMTHEAP
P570_B_2:/DATAMART/usr/datamart >db2 update db cfg for datamart using STMTHEAP 20480 AUTOMATIC
DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully.
P570_B_2:/DATAMART/usr/datamart >db2stop force
10/19/2012 10:56:14 0 0 SQL1064N DB2STOP processing was successful.
SQL1064N DB2STOP processing was successful.
P570_B_2:/DATAMART/usr/datamart >db2start
10/19/2012 10:56:20 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
P570_B_2:/DATAMART/usr/datamart >db2 get db cfg |grep STMT
SQL statement heap (4KB) (STMTHEAP) = AUTOMATIC(20480)
Automatic statement statistics (AUTO_STMT_STATS) = OFF
DB2 V9.5 for Linux, UNIX, and Windows
stmtheap - 語句堆大小配置參數
此參數指定語句堆的大小,語句堆在編譯 SQL 或 XQuery 語句期間用作 SQL 或 XQuery 編譯器的工作空間。
配置類型
資料庫
參數類型
可聯機配置
傳播類
語句邊界
預設值 [范圍]
帶有本地客戶機和遠程客戶機的資料庫伺服器:預設值為 AUTOMATIC(底層值為 8192)。
還可將該參數僅設置為某個固定值。
帶有本地客戶機和遠程客戶機的資料庫伺服器:預設值為 AUTOMATIC(底層值為 2048)。
還可將該參數僅設置為某個固定值。
對於 32 位平台
AUTOMATIC [128 - 524288]
對於 64 位平台
AUTOMATIC [128 - 524288]
註: 在初始創建資料庫後,預設值將由 DB2® 配置顧問程序進行更改。
計量單位
頁 (4 KB)
分配時間
對於預編譯或綁定期間的每個語句
釋放時間
當每個語句的預編譯或綁定完成時
此區域並不總是處於分配狀態,但要對每個處理的 SQL 或 XQuery
語句進行分配和釋放。注意:對於動態 SQL 或 XQuery 語句,將在程序執行期間使用此工作區; 而對於靜態 SQL 或 XQuery
語句,在綁定進程而不是在程序執行期間使用此工作區。
可使用底層值或固定值將 STMTHEAP 參數設置為 AUTOMATIC。該參數設置為 AUTOMATIC 時,底層值會對使用動態連接枚舉為單個編譯分配的內存量加以限制。如果遇到內存限制,語句編譯會使用貪婪連接枚舉和不受限制的語句堆重新啟動。其僅受到剩餘應用程序內存量
(APPL_MEMORY)、實例內存 (INSTANCE_MEMORY) 或系統內存的限制。如果貪婪連接枚舉成功完成,那麼將向應用程序返回一個 SQL0437W 警告。如果貪婪連接枚舉也遇到內存限制,那麼語句預編譯失敗,且帶有
SQL0101N。
例如,db2 update db cfg for SAMPLE using STMTHEAP 8192 AUTOMATIC 將為動態連接枚舉設置
8192 *4K (32MB) 的語句堆限制並對貪婪連接枚舉不設限制。
當 STMTHEAP 參數設置為固定值時,該限制同時適用於動態和貪婪連接枚舉。如果動態連接枚舉遇到內存限制,那麼將使用同一固定語句堆限制來嘗試貪婪連接枚舉。在 AUTOMATIC 情況下,類似的警告/錯誤也適用。
例如,db2 update db cfg for SAMPLE using STMTHEAP 8192 將同時為動態和貪婪連接枚舉生成
8192 * 4K (32MB) 的語句堆限制。
如果在運行時的查詢性能不夠高,請考慮增大 stmtheap 配置參數值(底層為 AUTOMATIC 的值或固定值),從而確保動態編程連接枚舉能夠成功。如果您更新 stmtheap 配置參數以提高查詢性能,那麼會導致重新編譯語句,以便查詢優化器可以創建新的訪問方案來利用已更改數量的語句堆。
註: 僅在優化類 3 和更高級別(預設值為 5)進行動態編程聯合枚舉。
⑦ oracle動態執行SQL字元串,字元串最大的長度是多少
你好:我知道的是最大可執行長度為6000個字元。通常在procere中sql拼接的時候會有這個問題,一邊解決方案是設置function對邏輯分別處理來實現減少sql長度的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
VAR_DYNAMIC_SQL := 'INSERT INTO RP_TRANS_LOG_MINUTE
(
TRANS_TIME,
TRANS_PROVINCE,
TRANS_TYPE,
SCORE_RANGE,
RULE_NAME,
POLICY_ACTION,
/*新加欄位開始*/
CHALLENGE_SUCCESSFUL,
CHALLENGE_AUTH_METHOD,
PRIORITY,---
DESCRIBE,--
IS_USE_DEVICE,--
TRANS_DITCH,
TRANS_OPER_SYSTEM,
TRANS_BROWSER,
FLAGGED,
RESOLUTION,
/*新加欄位結束*/
TRANS_NUM,
TRIGGERED_NUM,
TRIGGERED_SUCCESSFUL_NUM,
/*新加欄位開始*/
WEB_TRANS_NUM,
MOBILE_TRANS_NUM,
IPAD_TRANS_NUM,
QA_LOGIN_NUM,
SMS_LOGIN_NUM,
CC_LOGIN_NUM,
REGISTRAR_QA_NUM,--***
CREATE_CUSTOMR_FILE_NUM,
ALLOW_TRANS_NUM,
REVIEW_TRANS_NUM,
CHALLENGE_TRANS_NUM,
DENY_TRANS_NUM,
TOTAL_SCORE_RANGE,
TOTAL_AMOUNT
/*新加欄位結束*/
)
SELECT
TO_DATE(SUBSTR(TO_CHAR(SYS_CREATION_DATE,''YYYY-MM-DD HH24:MI:SS''),0,16),''YYYY-MM-DD HH24:MI''),
get_province(IP_COUNTRY,IP_CITY,ip_region) AS TRANS_PROVINCE,
GET_NAME_BY_CODE(GET_TOTAL_EVENT_TYPE(T.EVENT_TYPE,T.USER_DEFINED_EVENT_TYPE),''eventType'') AS TRANS_TYPE,
GET_SCORE_RANGE(T.RISK_SCORE) AS RISK_SCORE_RANGE,
NVL(POLICY_RULE_ID,''FALLBACK_RULE'') AS RULE_NAME,
POLICY_ACTION,
CHALLENGE_SUCCESSFUL,
CHALLENGE_AUTH_METHOD,
SUBSTR(GET_RULE_ORDER_ID(ORG_ID,POLICY_RULE_ID),0,INSTR(GET_RULE_ORDER_ID(ORG_ID,POLICY_RULE_ID),''+'')-1),--優先順序
SUBSTR(GET_RULE_ORDER_ID(ORG_ID,POLICY_RULE_ID),INSTR(GET_RULE_ORDER_ID(ORG_ID,POLICY_RULE_ID),''-'')+1),--描述
NVL(IS_DEVICE_BOUND,''N''),
CHANNEL_INDICATOR,
OPERATING_SYSTEM,
BROWSER_TYPE,
FLAGGED,
RESOLUTION,
COUNT(1) AS TRANS_NUM,
SUM(CASE WHEN POLICY_ACTION = ''CHALLENGE'' THEN 1 ELSE 0 END) AS TRIGGERED_NUM,
SUM(CASE WHEN POLICY_ACTION = ''CHALLENGE'' AND CHALLENGE_SUCCESSFUL = ''Y'' THEN 1 ELSE 0 END) AS TRIGGERED_SUCCESSFUL_NUM,
SUM(case WHEN CHANNEL_INDICATOR = ''WEB'' then 1 else 0 end ) AS WEB_TRANS_NUM,--WEB交易量
SUM(case WHEN CHANNEL_INDICATOR = ''MOBILE'' then 1 else 0 end ) AS MOBILE_TRANS_NUM,--Mobile交易量
SUM(case WHEN '||get_vale_from_cd1('6','4')||' = ''IPAD'' then 1 else 0 end ) AS IPDA_TRANS_NUM,--Ipad交易量
(SELECT SUM(CASE WHEN T1.ACSPNAME = ''QUESTION'' AND T1.STATUS = ''ACTIVE'' THEN 1 ELSE 0 END) FROM ACSPUSERACCOUNT T1 WHERE TO_DATE(to_char( T1.lastmodified,''yyyy-mm-DD HH24:MI:SS'' ),''yyyy-mm-DD HH24:MI:SS'') > TO_DATE('''||TO_CHAR(VAR_BEGIN_TIME,'YYYY-MM-DD HH24:MI:SS')||''',''YYYY-MM-DD HH24:MI:SS'') AND TO_DATE(to_char( T1.lastmodified,''yyyy-mm-DD HH24:MI:SS'' ),''yyyy-mm-DD HH24:MI:SS'') <= TO_DATE('''||TO_CHAR(VAR_END_TIME,'YYYY-MM-DD HH24:MI:SS')||''',''YYYY-MM-DD HH24:MI:SS'') )AS QA_LOGIN_NUM,
(SELECT SUM(CASE WHEN T1.ACSPNAME = ''SMS'' AND T1.STATUS = ''ACTIVE'' THEN 1 ELSE 0 END) FROM ACSPUSERACCOUNT T1 WHERE TO_DATE(to_char( T1.lastmodified,''yyyy-mm-DD HH24:MI:SS'' ),''yyyy-mm-DD HH24:MI:SS'') > TO_DATE('''||TO_CHAR(VAR_BEGIN_TIME,'YYYY-MM-DD HH24:MI:SS')||''',''YYYY-MM-DD HH24:MI:SS'') AND TO_DATE(to_char( T1.lastmodified,''yyyy-mm-DD HH24:MI:SS'' ),''yyyy-mm-DD HH24:MI:SS'') <= TO_DATE('''||TO_CHAR(VAR_END_TIME,'YYYY-MM-DD HH24:MI:SS')||''',''YYYY-MM-DD HH24:MI:SS''))AS SMS_LOGIN_NUM,
(SELECT SUM(CASE WHEN T1.ACSPNAME = ''CCC'' AND T1.STATUS = ''ACTIVE'' THEN 1 ELSE 0 END) FROM ACSPUSERACCOUNT T1 WHERE TO_DATE(to_char( T1.lastmodified,''yyyy-mm-DD HH24:MI:SS'' ),''yyyy-mm-DD HH24:MI:SS'') > TO_DATE('''||TO_CHAR(VAR_BEGIN_TIME,'YYYY-MM-DD HH24:MI:SS')||''',''YYYY-MM-DD HH24:MI:SS'') AND TO_DATE(to_char( T1.lastmodified,''yyyy-mm-DD HH24:MI:SS'' ),''yyyy-mm-DD HH24:MI:SS'') <= TO_DATE('''||TO_CHAR(VAR_END_TIME,'YYYY-MM-DD HH24:MI:SS')||''',''YYYY-MM-DD HH24:MI:SS''))AS CC_LOGIN_NUM,
''11111'',
(SELECT COUNT(USERNAME) FROM USERS T2 WHERE T2.CREATED >= TO_DATE( '''||TO_CHAR(VAR_BEGIN_TIME,'YYYY-MM-DD HH24:MI:SS')||''',''YYYY-MM-DD HH24:MI:SS'')
AND T2.CREATED <= TO_DATE('''||TO_CHAR(VAR_END_TIME,'YYYY-MM-DD HH24:MI:SS')||''',''YYYY-MM-DD HH24:MI:SS'') ) AS CREATE_CUSTOMR_FILE_NUM ,
SUM(CASE WHEN POLICY_ACTION = ''ALLOW'' then 1 else 0 end ) as ALLOW_TRANS_NUM,
SUM(CASE WHEN POLICY_ACTION = ''REVIEW'' then 1 else 0 end ) as REVIEW_TRANS_NUM,
SUM(CASE WHEN POLICY_ACTION = ''AHALLENGE'' then 1 else 0 end ) as CHALLENGE_TRANS_NUM,
SUM(CASE WHEN POLICY_ACTION = ''DENY'' then 1 else 0 end ) as DENY_TRANS_NUM,
SUM(RISK_SCORE) AS TOTAL_SCORE_RANGE,
SUM(GET_AMT_BY_CURRENCY(AMOUNT_ORIGINAL,AMOUNT_CURRENCY)) AS TOTAL_AMOUNT--通過匯率表和幣種轉換再求和
FROM EVENT_LOG_REALTIME T
WHERE SYS_CREATION_DATE >= TO_DATE('''||TO_CHAR(VAR_BEGIN_TIME,'YYYY-MM-DD HH24:MI:SS')||''',''YYYY-MM-DD HH24:MI:SS'') AND SYS_CREATION_DATE <= TO_DATE('''||TO_CHAR(VAR_END_TIME,'YYYY-MM-DD HH24:MI:SS')||''' ,''YYYY-MM-DD HH24:MI:SS'')
AND HAS_USED = ''T''
AND T.HAS_USED_TIME=T.LASTMODIFIED
GROUP BY
TO_DATE(SUBSTR(TO_CHAR(SYS_CREATION_DATE,''YYYY-MM-DD HH24:MI:SS''),0,16),''YYYY-MM-DD HH24:MI''),
get_province(IP_COUNTRY,IP_CITY,ip_region) ,
GET_NAME_BY_CODE(GET_TOTAL_EVENT_TYPE(T.EVENT_TYPE,T.USER_DEFINED_EVENT_TYPE),''eventType'') ,
GET_SCORE_RANGE(T.RISK_SCORE) ,
NVL(POLICY_RULE_ID,''FALLBACK_RULE'') ,
POLICY_ACTION,
CHALLENGE_SUCCESSFUL,
CHALLENGE_AUTH_METHOD,
SUBSTR(GET_RULE_ORDER_ID(ORG_ID,POLICY_RULE_ID),0,INSTR(GET_RULE_ORDER_ID(ORG_ID,POLICY_RULE_ID),''+'')-1),--優先順序
SUBSTR(GET_RULE_ORDER_ID(ORG_ID,POLICY_RULE_ID),INSTR(GET_RULE_ORDER_ID(ORG_ID,POLICY_RULE_ID),''-'')+1),--描述
NVL(IS_DEVICE_BOUND,''N''),
CHANNEL_INDICATOR,
OPERATING_SYSTEM,
BROWSER_TYPE,
FLAGGED,
RESOLUTION ';
-- insert into test (test_name) values(VAR_DYNAMIC_SQL);
--insert into test (test_name) values(TO_CHAR(VAR_BEGIN_TIME));
--insert into test (test_name) values(TO_CHAR(VAR_END_TIME));
-- commit;
execute immediate VAR_DYNAMIC_SQL;
⑧ oracle 存儲過程里用 execute immedate 動態sql,更新一個表的clob欄位報字元長度
sql裡面varchar2最多4000個位元組,sql語句最多32K長度,估計是你的a_clob太長,放到sql裡面超過這個限制了,具體是哪個原因還得你自己測試。
可以使用綁定變數的方式來做。
V_SQL
:=
'UPDATE
B
'||
'
SET
B_CLOB
=
'''
||
AA.A_CLOB
||'''
WHERE
B_KEY
=
'''||
AA.A_KEY
||
'''';
EXECUTE
IMMEDIATE
V_SQL;
改成:
V_SQL
:=
'UPDATE
B
SET
B_CLOB
=:1
WHERE
B_KEY
=:2
';
EXECUTE
IMMEDIATE
V_SQL
using
AA.A_CLOB,AA.A_KEY;
⑨ oracle 存儲過程里用 execute immedate 動態sql,更新一個表的clob欄位報字元長度
sql裡面varchar2最多4000個位元組,sql語句最多32K長度,估計是你的a_clob太長,放到sql裡面超過這個限制了,具體是哪個原因還得你自己測試。
可以使用綁定變數的方式來做。
V_SQL := 'UPDATE B '|| ' SET B_CLOB = ''' || AA.A_CLOB ||''' WHERE B_KEY = '''|| AA.A_KEY || '''';
EXECUTE IMMEDIATE V_SQL;
改成:
V_SQL := 'UPDATE B SET B_CLOB =:1 WHERE B_KEY =:2 ';
EXECUTE IMMEDIATE V_SQL using AA.A_CLOB,AA.A_KEY;
⑩ 請問,SQL可變長度 和 固定長度區別
我舉個例子你就明白了。假如char(5),那輸入"ABC",你讀取這個欄位的時候,就是"ABC ",後面會加兩個空格,長度為5假如varchar(5),那輸入"ABC",你讀取這個欄位的時候,就是"ABC",後面會加兩個空格,長度為3 這種char類型,編程的時候如果用List類控制項或者網頁的下拉列表,兩個欄位合並,就比較方便了,例如ABC |肉類A |菜類如果用varchar類型,就會變成:ABC|肉類A|菜類