Я использовал следующую процедуру, чтобы позаботиться об этом:
create or replace procedure drop_table_if_exists ( p_table_name varchar2 )
is
it_exist number;
begin
select count(*)
into it_exists
from user_tables
where table_name = p_table_name
;
if it_exists >= 1 then
execute immediate 'drop table '||p_table_name;
end if;
end;
/
exec drop_table_if_exists ( 'TABLE_TO_DROP' );
Я думаю о лучшем, которое я могу сделать, дают Вам набор примеров для изучения. Программисты JavaScript практически оцениваются тем, как хорошо они понимают объем. Это может время от времени быть довольно парадоксально.
А глобально ограниченная по объему переменная
// global scope
var a = 1;
function one() {
alert(a); // alerts '1'
}
Локальный объем
// global scope
var a = 1;
function two(a) { // passing (a) makes it local scope
alert(a); // alerts the given argument, not the global value of '1'
}
// local scope again
function three() {
var a = 3;
alert(a); // alerts '3'
}
Промежуточное звено : Никакая такая вещь как область действия блока в JavaScript (ES5; ES6 представляет let
)
a.
var a = 1;
function four() {
if (true) {
var a = 4;
}
alert(a); // alerts '4', not the global value of '1'
}
b.
var a = 1;
function one() {
if (true) {
let a = 4;
}
alert(a); // alerts '1' because the 'let' keyword uses block scoping
}
Промежуточное звено : Свойства объектов
var a = 1;
function Five() {
this.a = 5;
}
alert(new Five().a); // alerts '5'
Усовершенствованный : Закрытие
var a = 1;
var six = (function() {
var a = 6;
return function() {
// JavaScript "closure" means I have access to 'a' in here,
// because it is defined in the function in which I was defined.
alert(a); // alerts '6'
};
})();
Усовершенствованный : Основанное на прототипе разрешение объема
var a = 1;
function seven() {
this.a = 7;
}
// [object].prototype.property loses to
// [object].property in the lookup chain. For example...
// Won't get reached, because 'a' is set in the constructor above.
seven.prototype.a = -1;
// Will get reached, even though 'b' is NOT set in the constructor.
seven.prototype.b = 8;
alert(new seven().a); // alerts '7'
alert(new seven().b); // alerts '8'
<час> Global+Local: дополнительный сложный Случай
var x = 5;
(function () {
console.log(x);
var x = 10;
console.log(x);
})();
Это распечатает undefined
и 10
, а не 5
и 10
, так как JavaScript всегда перемещает объявления переменной (не инициализации) к вершине объема, делая код эквивалентным:
var x = 5;
(function () {
var x;
console.log(x);
x = 10;
console.log(x);
})();
Выгода ограниченная по объему пунктом переменная
var e = 5;
console.log(e);
try {
throw 6;
} catch (e) {
console.log(e);
}
console.log(e);
Это распечатает 5
, 6
, 5
. В тенях пункта e
выгоды глобальные и локальные переменные. Но этот специальный объем только для пойманной переменной. Если Вы пишете var f;
внутренняя часть пункт выгоды, то это - точно то же, как будто Вы определили его прежде или после блока try-catch.
Вот пример:
<script>
var globalVariable = 7; //==window.globalVariable
function aGlobal( param ) { //==window.aGlobal();
//param is only accessible in this function
var scopedToFunction = {
//can't be accessed outside of this function
nested : 3 //accessible by: scopedToFunction.nested
};
anotherGlobal = {
//global because there's no `var`
};
}
</script>
Вы захотите исследовать закрытия, и как использовать их для создания члены парламента, не занимающие официального поста .
JavaScript использует цепочки объема для установления объема для заданной функции. Обычно существует одна глобальная область видимости, и каждая функция, определяемая имеет свой собственный вложенный объем. Любая функция, определяемая в другой функции имеет локальный объем, который связан с внешней функцией. Это всегда - положение в источнике, который определяет объем.
элементом в цепочке объема является в основном Карта с указателем на его родительский объем.
При разрешении переменной, JavaScript запускается в самом внутреннем объеме и поисках за пределы.
Переменные, объявленные глобально, имеют глобальную область видимости. Переменные, объявленные в функции, ограничены по объему к той функции и теневым глобальным переменным того же имени.
(я уверен, существует много тонкости, на которую настоящие программисты JavaScript смогут указать в других ответах. В особенности я столкнулся эта страница о какой точно this
средства в любое время. Надо надеяться этого большего количества вводной ссылки достаточно для запущения Вас все же.)
В «Javascript 1.7» (расширение Mozilla для Javascript) можно также объявить переменные области блока с помощью оператора let
:
var a = 4;
let (a = 3) {
alert(a); // 3
}
alert(a); // 4