原始出處:
執行環境: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後仍是醜數。具體來說 ...