Можно моделировать закрытые методы как это:
function Restaurant() {
}
Restaurant.prototype = (function() {
var private_stuff = function() {
// Private code here
};
return {
constructor:Restaurant,
use_restroom:function() {
private_stuff();
}
};
})();
var r = new Restaurant();
// This will work:
r.use_restroom();
// This will cause an error:
r.private_stuff();
[еще 113] информация об этой технике здесь: http://webreflection.blogspot.com/2008/04/natural-javascript-private-methods.html
Использование COUNT (*) нормально, если вы также используете rownum = 1:
declare
l_cnt integer;
begin
select count(*)
into l_cnt
from x
where x.col_a = value_a
and x.col_b = value_b
and rownum = 1;
end;
Это всегда будет возвращать строку, поэтому нет необходимости обрабатывать какие-либо исключения NO_DATA_FOUND. Значение l_cnt будет 0 (нет строк) или 1 (существует как минимум 1 строка).
begin
select 'row DOES exist'
into ls_result
from dual
where exists (select null from x where x.col_a = value_a and x.col_b = value_b);
exception
when no_data_found then
ls_result := ' row does NOT exist';
end;
SELECT NULL
FROM x
WHERE x.col_a = value_a
AND x.col_b = value_b
AND rownum = 1
COUNT (*)
, безусловно, не лучший способ, так как ему нужно будет подсчитать все строки, а ROWNUM = 1
вернется, как только найдет первая соответствующая строка.
Вот код PL / SQL
:
DECLARE
ex INT;
BEGIN
BEGIN
SELECT NULL
INTO ex
FROM dual
WHERE 1 = 1
AND rownum = 1;
DBMS_OUTPUT.put_line('found');
EXCEPTION
WHEN no_data_found THEN
DBMS_OUTPUT.put_line('not found');
END;
END;
Я думаю, что использование EXISTS дает более естественный ответ на вопрос, чем попытка оптимизировать COUNT-запрос с помощью ROWNUM.
Позвольте Oracle выполнить оптимизацию ROWNUM за вас.
create or replace function is_exists (
p_value_a varchar2,
p_value_b varchar2)
return boolean
is
v_exists varchar2(1 char);
begin
begin
select 'Y' into v_exists from dual
where exists
(select 1 from x where x.col_a = p_value_a and x.col_b = p_value_a);
exception
when no_data_found then
v_exists := null;
end;
return v_exists is not null;
end is_exists;