當前位置:首頁 » 編程語言 » sql語句的最大長度

sql語句的最大長度

發布時間: 2022-09-21 11:29:28

① 如何調整oracle中的sql語句輸入的最大長度

Oracle SQL 語句in長度不得超過1000
IN 子句中的LIST個數最長為1000,超過該數目將報錯,這里可轉用一個臨時表來解決;CREATE TRIGGER語句文本的字元長度不能超過32KB(觸發器中不能使用LONG, LONG RAW 類型;觸發器內可以參照LOB 類型列的列值,但不能通過 :NEW 修改LOB列中的數據;)順便說一下,觸發器中的PARENT關鍵字,只在嵌套表觸發器中有效,11G以前,DBMS_SQL對輸入的SQL長度不能超過32K,原因是輸入參數只能是VARCHAR2類型,11G後,可以用CLOB作為輸入參數,則取消了這個限制一個PL/SQL的包、過程、函數、觸發器的大小,在UNIX上最大是64K,而WINDOWS則是32K大小(32K這個應該不準,看下面的測試)SQL語句可以有多長?(網友說)ORACLE文檔說是64K,實際受一些工具的限制會較這個值低,但網友測試發現可以很長,甚至超過1M(我測試過 170K的都沒問題)。具體多長,10G也未說明,只是與很多環境有關:資料庫配置,磁碟空間,內存多少。。。
PL/SQL中,表達式/SQL本身的長度是可以達到比較長的長度(50K)左右,如:v_str:=:new.f1||:ndw.f2。。。 ; select :new.f1||:new.f2。。。 into v_str from al; 另外發現,如果這樣寫:v_str := 『a』||』b』||。。。則允許的表達式長度將大大的減少。如果表達式/SQL過長,超過了一個ORACLE包/過程允許的最大程序長度,則在編譯時報 pls-123:program too large錯誤,這是pl/sql編譯器本身的限製造成的,即表達式/SQL的長度在PL/SQL中受限於包/過程的最大大小=================================================Oracle Sql語句長度限制問題及解決
最近在寫Sql語句時,碰到兩個問題:
1)ORA-01795: maximum number of expressions in a list is 1000起因:寫出了這樣的sql語句:SELECT PALLET_ID,BOX_ID,STATUS FROM SD_CURRENT_BOX WHERE PALLET_ID IN('"+pallets+"');其中的pallets是有很多個pallet_id組合成的字元串。
分析:很顯然,根據錯誤提示可以知道:in 中items的限制 1000個。
解決:用子查詢來代替pallets長字串。
2)ORA-01704: string literal too long
起因:寫出了這樣的Sql語句:UPDATE PDM_MEMBERLIST SET MEMBERS='<Project> ... 此處略去n多串 <ProjectID>'.
分析:資料庫設計MEMBERS欄位為xmltype格式,數據存儲時候,是以字元串的形式存儲。這樣在xml數據量大的時候,造成sql語句過長,嘗過2k的限制。
解決:參數化sql語句。
==================================================參數化sql語句----防止sql注入攻擊(下)
上一篇寫的sql注入的基本原理,本來要接著寫這篇的,但是由於時間的原因一直沒有寫成,今天是五一假期,總算是能抽空寫寫了。
作為一個程序員,防範sql注入的第一線是由我們來守護的,只要我們在程序中留少許的漏洞,就會給程序增強安全特性。所以我們要做的是要寫安全的程序,防止sql注入在程序體現在不要拼接sql字元串,一定要參數化sql或者寫存儲過程,這里就說說簡單的參數化sql吧。
例子中用c#和Oracle實現,Java中或者其他資料庫中的實現也是類似的。
using System.Data.OracleClient;//引入oracle操作包//定義DML語句
string strSQL = @"select user.name from user where user.name =:userName";//上句中的:userName就是sql語句中參數的佔位符,也就是說在資料庫伺服器中執行這條sql語句的時候這個佔位符要被其他東西替換掉,到底用什麼東西替換呢,接著往下看OracleParameter[] param = {
new OracleParameter(":userName",txtName);}//這里定義一個參數的數組,裡面可以寫入多個sql參數,咱們的這里只有一個,所以就寫入一個參數,這里講佔位符和他的替換也就是參數值對應起來了,txtName就是佔位符的替換值,他是用戶界面中用戶輸入的值,就是他可能含有注入攻擊的字元,這下資料庫伺服器知道用什麼東西替換佔位符了。
定義好sql語句和參數後就是執行了,執行的時候需要同時將sql語句和參數傳入,這樣用戶輸入的帶有非法字元的字元串在資料庫會當作參數處理,而不會當作sql語句和資料庫自己的字元混亂,防止了注入攻擊。
OracleCommandcmd = new OracleCommand();
cmd.CommandText= strSQL;//定義oracle命令的文本內容for(oracleParameter p in param)//將參數傳入{
cmd.Parameters.Add(p);
}
cmd.ExecuteNonQuery();//執行命令
上面基本上是一個完整的參數化sql,不同的資料庫伺服器sql語句中參數的佔位符不同,上面用的是oracle,參數佔位符是冒號(:)加名字,在sqlserver中是用@符號加名字作為佔位符,而在MySQL中用問號(?)加名字來作為參數佔位符,不同的資料庫中參數的表示符號不一樣,這個需要注意。
防止sql注入攻擊(上)
Sql注入是一種入門極低破壞極大的攻擊方式。如果sql是用字元串拼接出來的話,那麼肯定會被注入攻擊,前段時間還傳出了某國外大型社交網站被SQL注入攻擊。
Sql注入攻擊的方式,來這里看的同志們應該很清楚了,就是在拼接字元串的時候,如果輸入的是帶單引號的,那麼輸入laf'or 1='1'--這樣就會逃避條件檢查,後面要是再跟一些shutdown,delete之類的條件,那麼損失基本算是毀滅性的了。前幾天單位開發的過程中我發現幾乎大家都不重視安全,一個寫代碼的人不注意安全只注意實現那麼寫出來的代碼在攻擊者眼前基本就是一個沒有穿衣服的美女。
下面是我一個開發人員的一些經驗,主要用來防止sql注入。
1、首先對運行sql的用戶賦予最小許可權,這個理論也是安全領域的最小特權理論,運行一個程序一定要用最小特權運行,所以不要給用戶服務DBA的許可權,限制要許可權之後可以防止一些毀滅性的攻擊,即使攻入了也不會shutdown修改表之類的。
2、一定不要使用字元串拼接的方式構造sql,必須使用參數化sql,存儲過程可以看作是參數sql,簡單的就直接構造參數化sql,復雜的就寫存儲過程,不過存儲過程中一定不要用字元串,我看有人在存儲過程用字元串,這樣還是不能避免被攻擊,並且在調試的時候非常麻煩。
3、嚴把輸入關,系統肯定是用來交互的,所有用戶輸入的這一關一定要把好,可以利用各種方式來檢驗用戶的輸入,讓輸入都是合法的;可以設敏感字元不讓用戶輸入,這個雖然不是很友好,不過對與安全有保證。在驗證的是可以用正則表達式或者程序驗證,不管用什麼方式只要把敏感字元和可疑字元拒之門外那麼就無法攻擊了,不過限制輸入還是有缺陷,在安全理論方面,只能確定合法,不能確定不合法,比如你在界面限制了合法的,那麼剩餘的都是不合法的,這時候輸入的肯定全部是合法的,如果你限制的是非法的,可是你能確保你限制的全是非法的?如果某一天發現一個非法的不再你限制之內那麼你就會被攻擊。
4、做好自己的檢驗和測試工作,自己可以進行sql注入攻擊,利用工具檢驗。
5、一定要養成具有安全意識的程序員,時刻想著安全。
這幾條之中最重要的是1和2,許可權限制一定要注意,不然會死的很慘的,第二就是程序員的習慣了,一定要用參數化sql和資料庫交互。

② SQL語句最長可以有多長

MSSQL SQL語句的最大長度是有限度的,對於varchar類型最多可以有8000個字元(varchar如果含中文字元,則一個中文字元要佔兩位),nvarchar類型最多可以接受4000個字元,超出限制長度的部分會被截掉,語句可能因此變得不完整而無法執行。

③ 在SQLServer中,單條SQL語句的最大長度是多少

我們平時寫的ORACLE報表,最長的語句有2千多行的,一行幾十個字元。
普通的都幾十行到幾百行。

④ 一條sql語句最長可以多長

不同的資料庫甚至相同資料庫的不同版本都可能不一樣,具體可以查詢聯機幫助,或參閱產品規格說明。總的來說SQL語句的最大長度限制都是很大的,編寫SQL語句一般不需要考慮語句的長度問題。例如ACCESS的SQL最大長度約為6,4000個、MSSQL為65,536 * 網路數據包。像這樣的長度,足夠你寫下長篇大論了。但是話要說回來,一個太長的語句其執行效率變得會低下,盡量避免編寫太長和過於復雜的SQL語句還是非常必要的。

⑤ ado commangtext sql 最大長度

4000個字元。adocommangtextsql是MSSQLSQL語句的最大長度可以接受4000個字元,超出限制長度的部分會被截掉,語句可能因此變得不完整而無法執行。

⑥ SQL查詢語句最長多少個字元

1、SQL Server中SQL 2005及其後的版本中,單條SQL語句理論上,沒有長度限制,但硬體條件是否吃得消,當別論。

2、沒有在官方的資料中查詢到有相關限制的說法,有人嘗試著寫了一個長度為200K以上的語句,結果還是可以運行的。

3、可以自已實測,具體做法,在SQL的SQL Server Management Studio中運行如下語句

select'1'aslsunion
select'1'aslsunion
select'1'aslsunion
select'1'aslsunion
select'1'aslsunion
select'1'aslsunion
select'1'aslsunion
select'1'aslsunion
select'1'aslsunion
--中間請再復制,一共8000行左右
select'1'aslsunion
select'1'aslsunion
select'1'aslsunion
select'1'aslsunion
select'1'aslsunion

select'1'aslsunion
select'1'asls

在我的伺服器上,SQL 2008R2下,雙4核CPU,32G內存下,運行8千行左右這樣的代碼,需要的時間為1分鍾左右。將這些代碼保存為SQL腳本,可以看到,它的大小為200K左右。更長的代碼是否能運行,我就不去測試了。

注意,上面的代碼如果復制到8千行,在一般的台式電腦上安裝的SQL Server下是否吃得消,我就不知道了。如果要嘗試的話,1千行一千行的增加去試吧。

別在重要的生產伺服器上玩這樣的花樣,玩死了哭不出來。


4、另外的提示,如果是編程,聯接SQL,要注意它們自身對字元串的長度是否有限制。(VS中C++的string的限制是4G,這在當前基本上可以不考慮了)。

⑦ ORACLE中SQL語句最大長度是多少

自己測試吧,
select '1' union
select '1' union
select '1' union
select '1' union
select '1' union
復制多些就知道了。。。

⑧ 請教,ORACLE中SQL語句最大長度是多少

我知道的是最大可執行長度為6000個字元。通常在procere中sql拼接的時候會有這個問題,一邊解決方案是設置function對邏輯分別處理來實現減少sql長度的。

⑨ SQL的語句最大長度限制多少字元

MSSQL SQL語句的最大長度是有限度的,對於varchar類型最多可以有8000個字元(varchar如果含中文字元,則一個中文字元要佔兩位),nvarchar類型最多可以接受4000個字元,超出限制長度的部分會被截掉,語句可能因此變得不完整而無法執行。

熱點內容
hbasejavaapi 發布:2025-01-11 01:11:09 瀏覽:744
我的世界pe版飢餓伺服器 發布:2025-01-11 01:09:39 瀏覽:485
異構資料庫數據同步 發布:2025-01-11 01:09:04 瀏覽:957
c語言三角波 發布:2025-01-11 01:02:11 瀏覽:78
php正則轉義 發布:2025-01-11 01:00:03 瀏覽:691
手拉的箱包上的密碼鎖一般是多少 發布:2025-01-11 00:59:55 瀏覽:8
oppo手機系統更新密碼是多少 發布:2025-01-11 00:56:55 瀏覽:87
群輝存儲伺服器 發布:2025-01-11 00:50:19 瀏覽:429
如何用js腳本 發布:2025-01-11 00:47:32 瀏覽:888
日誌和資料庫 發布:2025-01-11 00:47:24 瀏覽:127