oracle 每日一題 LONG資料型別

2021-07-27 10:44:14 字數 1972 閱讀 1497

原始出處:

執行環境:sqlplus, serveroutput已開啟

我執行了下列語句:

create table plch_data

(id   integer,

l    long)/

begin

insert into plch_data values (1, 'abc');

commit;

end;

/哪些選項在執行之後會導致 "found-1" 被顯示在螢幕上?

(a) 

select 'found-' || id

from plch_data

where l like 'a%'

/(b) 

create or replace function plch_l_value (id_in in plch_data.id%type)

return varchar2

isl_return   varchar2 (32767);

begin

select l

into l_return

from plch_data

where id = id_in;

return l_return;

end;

/select 'found-' || id

from plch_data

where plch_l_value (id) like 'a%'

/(c) 

create or replace function plch_l_value (l_in in plch_data.l%type)

return varchar2

isl_return   varchar2 (32767) := l_in;

begin

return l_return;

end;

/select 'found-' || id

from plch_data

where plch_l_value (l) like 'a%'

/(d) 

with function l_value (id_in in plch_data.id%type)

return varchar2

isl_return   varchar2 (32767);

begin

select l

into l_return

from plch_data

where id = id_in;

return l_return;

end;

select 'found-' || id

from plch_data

where l_value (id) like 'a%'/

a: 這個選項會報錯:

"ora-00932: inconsistent datatypes: expected char got long". 

你不能在乙個like子句中使用long列。 

b: 這個可以。我依賴於乙個pl/sql函式來將long值轉換成varchar2,然後就可以用在like子句中。

不幸的是,在主查詢內部,我還在這個函式中執行了另乙個查詢。伴隨著執行函式時從sql到pl/sql之間的上下文切換,這也意味著你在行數很多時必須當心這種查詢的效能問題。

c: 在這個函式中,我查詢的不是long值。我將它傳遞給乙個函式來將它轉換成乙個varchar2。可悲的是,這個選項會報錯:

"ora-00997: illegal use of long datatype".

d: 這個選項用了和b同樣的技術,但是利用了with function 子句(12c新功能)來將函式直接嵌入到查詢之中。

假如:(a)在其它地方我不需要這個函式(b)我不想讓「一次性」的過程和函式搞亂我的資料字典

那麼我可能會採取這種方法。

---------------

教訓:千萬不要再用long資料型別,應該用clob。

每日一題 數對

本題來自牛客網,為網易2019年校招題之一。點我跳轉 題目描述 牛牛以前在老師那裡得到了乙個正整數數對 x,y 牛牛忘記他們具體是多少了。但是牛牛記得老師告訴過他x和y均不大於n,並且x除以y的餘數大於等於k。牛牛希望你能幫他計算一共有多少個可能的數對。輸入描述 輸入包括兩個正整數n,k 1 n 1...

每日一題 Windy 數

數字 dp 這道題與模板只有一點點稍微的不同,還需要判段一下 前導 0 因為我們是從高位開始列舉的,列舉到最後可能會出現這樣的情況 0004,顯然這個數不是 windy 數,但是我們可以看到 0 和 4 相差 是 2 的,所以如果不判斷前導 0 的話就會出現多加的情況,其他 的和模板類似。inclu...

每日一題 43 醜數

題目來自劍指offer 題目 題目換句話說 醜數就是連續除以2,3,5,之後商為1的數.bool isuglynum int nnum 消除因子3 while nnum 3 0 消除因子5 while nnum 5 0 if nnum 1 else 題目思路 醜數乘以2,3,5後仍是醜數。具體來說 ...