Как делают я использую, СОЗДАЮТ ИЛИ ЗАМЕНЯЮТ?

Уберите руки от клавиатуры и спросите своего клиента о причине , почему он хочет, чтобы данные были видны, но не могли быть скопированы?

Он просит две несоответствующие вещи и, возможно, обсуждение его рассуждений принесет некоторые плоды.

Возможно, он действительно не хочет, чтобы он был общедоступным, и вам нужно добавить аутентификацию / авторизацию. Или он может решить, что действительно важно открыть API. Но вы не узнаете, пока не спросите.

92
задан Jason Baker 17 June 2009 в 16:44
поделиться

7 ответов

Это работает с функциями, процедурами, пакетами, типами, синонимами, триггерами и представлениями.

Обновление:

После обновления сообщения в третий раз я переформулирую это:

Это не работает с таблицами :)

И да, есть документация по этому синтаксису, и нет опции REPLACE для CREATE TABLE ].

147
ответ дан 24 November 2019 в 06:26
поделиться

В Oracle нет таблицы создания или замены.

Вы должны:

DROP TABLE foo;
CREATE TABLE foo (....);
21
ответ дан 24 November 2019 в 06:26
поделиться

Одним из преимуществ синтаксиса является то, что вы можете быть уверены, что 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;
/
33
ответ дан 24 November 2019 в 06:26
поделиться

CREATE OR REPLACE может использоваться только для функций, процедур, типов, представлений или пакетов - он не будет работать с таблицами.

8
ответ дан 24 November 2019 в 06:26
поделиться

Если это для 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 (...
-3
ответ дан 24 November 2019 в 06:26
поделиться

Не работает с таблицами, только с функциями и т. Д.

Вот сайт с некоторыми примерами .

3
ответ дан 24 November 2019 в 06:26
поделиться

Следующий сценарий должен помочь с Oracle:

BEGIN
  EXECUTE IMMEDIATE 'drop TABLE tablename';
EXCEPTION
  WHEN OTHERS THEN
    IF sqlcode != -0942 THEN RAISE; 
    END IF;
END;
4
ответ дан 24 November 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: