Обновить пакет из SQLPLUS

Я пытаюсь обновить пакет в Oracle, исходящий из SQL Server, это сбивает с толку.

Я написал пакетный файл, который сначала запускает файл .spec, а затем файл .body, но даже запуск его вручную не работает.

Я использую этот синтаксис:

sqlplus username/password@databasename @c:\temp\myfile.spec
sqlplus username/password@databasename @c:\temp\myfile.body

Когда я возвращаюсь к Sql Developer, я могу посмотреть хранимые процедуры в пакете и увидеть, что они не были обновлены.

Почему мои пакеты не обновляются?


person H. Abraham Chavez    schedule 13.12.2010    source источник
comment
Имеют ли файлы спецификаций и тела окончание /?   -  person Sathyajith Bhat    schedule 13.12.2010
comment
Можете ли вы выполнить содержимое пакетных файлов в SQLDeveloper (вырезать и вставить их)?   -  person    schedule 13.12.2010
comment
@Jack, когда я вырезаю и вставляю их, работает в SQL Developer, но тот же файл не работает через SQL * Plus.   -  person H. Abraham Chavez    schedule 13.12.2010
comment
Можете ли вы нормально подключиться к SQL*Plus с помощью sqlplus username/password@databasename?   -  person    schedule 13.12.2010
comment
Да, я могу успешно подключиться, но я просто не могу применить изменения в своем пакете (.spec и .body).   -  person H. Abraham Chavez    schedule 13.12.2010


Ответы (2)


Файлы спецификаций и тела должны / заставлять SQL*Plus создавать/заменять объект.

Без /:

CREATE OR REPLACE PACKAGE TEST12_13 AS

PROCEDURE TEST12_13;

END;

STAGE@DB>@C:\TEST.PKS
  6  

С /:

CREATE OR REPLACE PACKAGE TEST12_13 AS

PROCEDURE TEST12_13;

END;

/

STAGE@DB>@C:\TEST.PKS

Package created.

В ответ на ваш комментарий о передаче имени файла в качестве параметра вместо передачи имени файла в качестве параметра SQL * Plus запросит у вас имя файла

    wrapper.sql

ACCEPT filename_var Prompt 'Enter filename'

@c:\temp\&filename_var
/
@c:\temp\&filename_var
/
person Sathyajith Bhat    schedule 13.12.2010
comment
Когда я добавляю / в конце, SQL*Plus не предлагает мне ввести значение. Я не писал пакет, и он довольно большой. Какие условия вызывают это? - person H. Abraham Chavez; 13.12.2010
comment
@ЧАС. Авраам, какое значение ожидается? Стандартным ответом должен быть ответ Package created. Можете ли вы опубликовать отображаемое сообщение? Откройте SQL*Plus и запустите @c:\temp\myfile.spec из командной строки. - person Sathyajith Bhat; 13.12.2010
comment
Мои извинения, я сделал опечатку. Я хотел сказать, что: SQL * Plus СЕЙЧАС предлагает мне ввести значение. Я хочу, чтобы я предоставил значение для того, что я предполагаю, является переменной в пакете. Я только хочу внести изменения в мои файлы пакетов и применить их к базе данных. - person H. Abraham Chavez; 13.12.2010
comment
@ЧАС. Абрахам: Сначала запустите set define off перед запуском пакета. - person Sathyajith Bhat; 13.12.2010
comment
Я думаю, что мы близки, но еще нет. У меня работает, когда я запускаю его вручную. Я завернул вызов скрипта в другой файл. Так что я могу добавить / в конце, не изменяя сценарий пакета. Я передавал имя файла через командную строку в качестве параметра, однако, поскольку я установил set define off, переменная &1 больше не работает. Есть идеи? - person H. Abraham Chavez; 13.12.2010
comment
@ЧАС. Авраам Вы можете сделать так, чтобы SQL*Plus запрашивал ввод. поместите ACCEPT filename_var Prompt 'Enter filename' в свою оболочку, замените filename_var переменной, которую вы планируете использовать. Если возможно, отредактируйте свой вопрос и включите оболочку, чтобы я мог помочь вам лучше. Я отредактировал свой ответ, чтобы отразить, что означает мой комментарий. - person Sathyajith Bhat; 13.12.2010
comment
@Abraham, также безопасно всегда заключать имя файла в двойные кавычки. @c:\temp\myfile.spec. В данном случае это не проблема, но если в пути к файлу есть пробелы, это приведет к проблемам. - person Rajesh Chamarthi; 14.12.2010

Подключитесь к SQL*Plus с помощью

sqlplus username/password@databasename

Затем запустите скрипт из командной строки SQL*Plus:

set echo on
@c:\temp\myfile.spec

Вы должны увидеть, что происходит, включая любые сообщения об ошибках.

person Community    schedule 13.12.2010