Уберите руки от клавиатуры и спросите своего клиента о причине , почему он хочет, чтобы данные были видны, но не могли быть скопированы?
Он просит две несоответствующие вещи и, возможно, обсуждение его рассуждений принесет некоторые плоды.
Возможно, он действительно не хочет, чтобы он был общедоступным, и вам нужно добавить аутентификацию / авторизацию. Или он может решить, что действительно важно открыть API. Но вы не узнаете, пока не спросите.
Это работает с функциями, процедурами, пакетами, типами, синонимами, триггерами и представлениями.
Обновление:
После обновления сообщения в третий раз я переформулирую это:
Это не работает с таблицами :)
И да, есть документация по этому синтаксису, и нет опции REPLACE
для CREATE TABLE
].
В Oracle нет таблицы создания или замены.
Вы должны:
DROP TABLE foo; CREATE TABLE foo (....);
Одним из преимуществ синтаксиса является то, что вы можете быть уверены, что CREATE OR REPLACE
никогда не приведет к потере данных (больше всего вы потеряете, это код , который, надеюсь, вы где-нибудь храните в системе управления версиями).
Эквивалентный синтаксис для таблиц - ALTER, что означает, что вам нужно явно перечислить точные требуемые изменения.
EDIT: Кстати, если вам нужно выполнить DROP + CREATE в скрипте, и вам не нужны ложные ошибки типа «объект не существует» (когда DROP не находит таблицу), вы можете сделать это:
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE owner.mytable';
EXCEPTION
WHEN OTHERS THEN
IF sqlcode != -0942 THEN RAISE; END IF;
END;
/
CREATE OR REPLACE
может использоваться только для функций, процедур, типов, представлений или пакетов - он не будет работать с таблицами.
Если это для MS SQL .. Следующий код будет всегда выполняться независимо от того, существует ли таблица уже или нет.
if object_id('mytablename') is not null //has the table been created already in the db
Begin
drop table mytablename
End
Create table mytablename (...
Не работает с таблицами, только с функциями и т. Д.
Вот сайт с некоторыми примерами .
Следующий сценарий должен помочь с Oracle:
BEGIN
EXECUTE IMMEDIATE 'drop TABLE tablename';
EXCEPTION
WHEN OTHERS THEN
IF sqlcode != -0942 THEN RAISE;
END IF;
END;