Oracle?SQL報(bào)錯(cuò):ORA-06550解決辦法
1 - 報(bào)錯(cuò)內(nèi)容
PLSQL中編寫(xiě)完存儲(chǔ)過(guò)程,測(cè)試使用存儲(chǔ)過(guò)程,報(bào)錯(cuò):
查詢出錯(cuò)[SQL數(shù)據(jù)集[SQL_XY*****]游標(biāo)方式執(zhí)行時(shí)候出現(xiàn)錯(cuò)誤:java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列: PLS-00306: wrong number or types of arguments in call to ‘PRO_PIF******’ ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored ]
2 - 報(bào)錯(cuò)原因
網(wǎng)上有很多種原因和解決辦法,我這次遇到的問(wèn)題是由于存儲(chǔ)過(guò)程中 編寫(xiě)好的SQL超出了VARCHAR2的最大長(zhǎng)度 (定義時(shí)設(shè)定VARCHAR2(32767)),多了很多回車(chē)換行、空格符號(hào)。
3 - 調(diào)整方式
存儲(chǔ)過(guò)程中導(dǎo)致報(bào)錯(cuò)的SQL示例如下:(SQL語(yǔ)法本身沒(méi)有錯(cuò)誤)
// 報(bào)錯(cuò)的SQL串示例(中間的回車(chē)空格都會(huì)計(jì)入字節(jié)數(shù)) select * from ( select ... ) union ( select ... ) ... // union了大概有六個(gè)子表
修改后的SQL示例如下:
// 調(diào)整后的SQL串,減少了空格回車(chē),不再報(bào)錯(cuò) select * from (select ...) union (select ...) ...
4 - 原因分析
1) 關(guān)于VARCHAR2的大小問(wèn)題
在 ORACLE 數(shù)據(jù)庫(kù) 的SQL參考文檔中指出VARCHAR2字段類(lèi)型的 最大字節(jié)長(zhǎng)度為 4000 (注意是字節(jié)長(zhǎng)度,不是字符長(zhǎng)度)
在 PL/SQL 的官方文檔中指出VARCHAR2的 最大字節(jié)長(zhǎng)度為 32767
2) SQL排版問(wèn)題
我起初是為了SQL易讀,添加各種空格和回車(chē),但是在PLSQL中是會(huì)計(jì)算空格回車(chē)的,因此重新調(diào)整排列方式后,問(wèn)題得到解決。關(guān)于SQL的易讀的優(yōu)化,可以通過(guò)調(diào)整排版、適當(dāng)減少嵌套、使用ORACLE函數(shù)(比如WITH AS臨時(shí)表)等方式,還需要多多注意,多思考和學(xué)習(xí)。
總結(jié)
到此這篇關(guān)于Oracle SQL報(bào)錯(cuò):ORA-06550解決辦法的文章就介紹到這了,更多相關(guān)Oracle報(bào)錯(cuò)ORA-06550內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle SQL樹(shù)形結(jié)構(gòu)查詢
本文介紹Oracle中使用START WITH...CONNECT BY PRIOR子句實(shí)現(xiàn)遞歸查詢樹(shù)形結(jié)構(gòu)的方法,小伙伴們可以參考一下。2016-05-05
Oracle 12c實(shí)現(xiàn)手工建庫(kù)而非CDB及CDB創(chuàng)建的方法
這篇文章主要給大家介紹了關(guān)于Oracle 12c實(shí)現(xiàn)手工建庫(kù)而非CDB及CDB創(chuàng)建的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用oracle 12c具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
ORACLE應(yīng)用經(jīng)驗(yàn)(1)
ORACLE應(yīng)用經(jīng)驗(yàn)(1)...2007-03-03
oracle誤刪數(shù)據(jù)恢復(fù)方法小結(jié)
最近幫客戶維護(hù)一個(gè)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中的數(shù)據(jù)被他誤刪了,下面就為大家分享下我是通過(guò)什么方法來(lái)實(shí)現(xiàn)的2015-08-08
Oracle查詢優(yōu)化之高效實(shí)現(xiàn)僅查詢前10條記錄的方法與實(shí)踐
這篇文章主要介紹了Oracle查詢優(yōu)化之高效實(shí)現(xiàn)僅查詢前10條記錄的相關(guān)資料,包括使用ROWNUM、ROW_NUMBER()函數(shù)、FETCH?FIRST(適用于Oracle12c及以上版本)以及LIMIT風(fēng)格(僅適用于兼容模式),需要的朋友可以參考下2025-01-01
Oracle開(kāi)發(fā)之報(bào)表函數(shù)
本文主要介紹Oracle報(bào)表函數(shù)RATIO_TO_REPORT的具體使用方法,需要的朋友可以參考下。2016-05-05


