用PB是做個小程式,同時使用兩個Oracle資料庫,資料庫連接串做好了,在A庫的用戶下,可以連連到B庫的視圖
但是Select時有問題
select 欄位1 into :變數1 from 視圖名@連接B庫做的串 where 欄位2 = :變數2;
將變數2取到的值跟蹤出來
select 欄位1 into :變數1 from 視圖名@連接B庫做的串 where 欄位2 = '變數2的值';
執行后有結果且正確,有能幫忙解決的高手沒
uj5u.com熱心網友回復:
select 時有什么問題?uj5u.com熱心網友回復:
斷點跟蹤需要into的變數沒有給到值,可兩句話的差別只在where后面一個是欄位=變數一個是欄位=字串,字串還是用斷點跟到的變數取到的值Ctrl+C過來的,可用欄位=:變臉就是into不進值去,分號、冒號的全角半角也差了,就是不知道問什么不行uj5u.com熱心網友回復:
在 sql 后面加上檢查 sqlcode 值的代碼,如果 sql 執行出錯,顯示 sqlca.sqlerrtext 中的資訊uj5u.com熱心網友回復:
今天又測驗了一天,依然沒解決。同樣一條Select從同一個視圖里取同一個欄位的值,有的就能取到,有的就取不到,差別就是where后面的條件那個=:變數,但是where后面用=‘變數值的字串’就能取到。取不到時報sqlcode是ORA-01462uj5u.com熱心網友回復:
也就是說,當使用 where = :變數時,有時取得到,有時取不到。這就證明 select 語法本身沒有問題。但你說取不到的記錄通過 where = :‘變數值的字串’又能取得到。這就很奇怪了!確實無法理解。。。
這個錯誤資訊,應該是 insert 才會產生,select 沒理由產生啊?
ORA-01462 cannot insert string literals longer than 4000 characters
Cause: The longest literal supported by Oracle consists of 2000 characters.
Action: Reduce the number of characters in the literal to 2000 characters or fewer or use the VARCHAR2 or LONG datatype to insert strings exceeding 2000 characters.
你試一下把 B 庫的這個視圖直接鏈到 A 庫,也就是在 A 庫中建一個同名視圖,然后用這個同名視圖建一個資料視窗物件,給這個資料視窗物件增加檢索引數測驗一下。這么做可以盡量減少代碼可能帶來的問題。
uj5u.com熱心網友回復:
應該不是代碼的問題,寫了一段直接測string a
a = '字串'
PB里寫
select 欄位1 into :變數 from 視圖名@鏈接串 where 欄位2 = :a
繼續報ORA-01460
寫
select 欄位1 into :變數 from 視圖名@鏈接串 where 欄位2 = ‘字串’
結果正常
兩了一下字符集,一個是16GBK的一個是AL32UTF8的,這個有辦法在代碼里轉換或處理嗎
uj5u.com熱心網友回復:
原來如此,百度了一段資料http://blog.csdn.net/lyn_bigdream/article/details/7473278
AL32UTF8字符集是9i才出現的,那么對于9i以后的版本訪問沒有任何問題,但是對于8i及以前的版本,則不認識這個字符集。這就使得8i及更低版本的客戶端在訪問9i以上AL32UTF8的資料庫時,會碰到各種各樣的問題。
也就是說,如果你的 oracle 客戶端是 9i 以前的版本,就換成 9i 以上的版本。
pb 的字符集是與作業系統的字符集對應,和 oracle 沒有關系,所以在代碼上沒有什么辦法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/54092.html
標籤:基礎類
