Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Ошибка в простейшем запросе  [new]
PavelDart
Member

Откуда:
Сообщений: 197
Доброго времени суток.

Имеется код простой процедуры. В коде возникла ошибка. Подскажите, пожалуйста, что не так?

Код:
create or replace procedure main/*(ref in varchar2)*/ 
is
pre_graph CLOB;
buf VARCHAR2(40);

begin

CREATE TABLE Gr1 (id Number,graph CLOB);
INSERT INTO graphone VALUES (0,empty_clob());
SELECT graph INTO pre_graph FROM graphone WHERE id=0;
buf:='
0101
0110
0010
0101
';
DBMS_LOB.write(pre_graph,lenght(buf),0,buf)
  
end main;

ошибка:
Compilation errors for PROCEDURE PAVELDART.MAIN

Error: PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:

begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
Line: 8
Text: CREATE TABLE Gr1 (id Number,graph CLOB);

Написано на PL/SQL Developer
3 июл 09, 12:40    [7372883]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Вы знаете, что такое DDL? Вот эти операторы не разрешены напрямую в коде (только через динамический SQL), но лучше просто задуматься, надо ли Вам действительно создавать таблицу в процедуре.
3 июл 09, 12:45    [7372917]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
PavelDart
Member

Откуда:
Сообщений: 197
Jannny
лучше просто задуматься, надо ли Вам действительно создавать таблицу в процедуре.

Задача - запрограммировать автоматическое создание таблицы с записями.
Будте добры, подскажите подходящий способ.
3 июл 09, 12:48    [7372943]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
SysOper
Member

Откуда: M
Сообщений: 9760
PavelDart
Доброго времени суток.

Имеется код простой процедуры. В коде возникла ошибка. Подскажите, пожалуйста, что не так?

Код:
create or replace procedure main/*(ref in varchar2)*/ 
is
pre_graph CLOB;
buf VARCHAR2(40);

begin

CREATE TABLE Gr1 (id Number,graph CLOB);
INSERT INTO graphone VALUES (0,empty_clob());
SELECT graph INTO pre_graph FROM graphone WHERE id=0;
buf:='
0101
0110
0010
0101
';
DBMS_LOB.write(pre_graph,lenght --не знаю такую функцию
(buf),0,buf) --чего не хватает?
  
end main;

ошибка:
Compilation errors for PROCEDURE PAVELDART.MAIN

Error: PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:

begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
Line: 8
Text: CREATE TABLE Gr1 (id Number,graph CLOB);

Написано на PL/SQL Developer
3 июл 09, 12:48    [7372950]     Ответить | Цитировать Сообщить модератору
 Ошибка в простейшем запросе  [new]
PavelDart
Member

Откуда:
Сообщений: 197
Оригинальный код:
DECLARE
   pf1 CLOB;
   pf2 BLOB;
   buf varchar2;
BEGIN 
CREATE TABLE tbl1 ( f1 CLOB, f2 BLOB);
INSERT INTO tbl1 VALUES 
   (empty_clob(),empty_blob() );
   SELECT f1 INTO pf1 FROM tbl1 FOR UPDATE;
   buf := 'Текст, который будет вставлен
   в объект LOB';
   DBMS_LOB.write (pf1, length(buf), 0, buf);
END; 
отсюда: http://www.intuit.ru/department/database/cdba/11/2.html

По поводу второй ошибки всё понятно. )
3 июл 09, 13:00    [7373049]     Ответить | Цитировать Сообщить модератору
 Ошибка в простейшем запросе  [new]
PavelDart
Member

Откуда:
Сообщений: 197
DBMS_LOB.write (pf1, length(buf), 0, buf);
Мда... Увидел наконец-то.
3 июл 09, 13:03    [7373073]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
PavelDart
Будте добры, подскажите подходящий способ.

Jannny
(только через динамический SQL)

PS: Только это не подходящий способ. Создавать на лету таблицу - это просто неправильно.
3 июл 09, 14:26    [7373695]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
Bfink
Member

Откуда: Москва
Сообщений: 2797
PavelDart
Оригинальный код:


Он тоже синтаксически неправильный.

А по существу - не только создается таблица, но еще и только из одной строки!
SELECT f1 INTO pf1 FROM tbl1 FOR UPDATE

А слабо воспользоваться dual в таком контексте?
3 июл 09, 14:31    [7373732]     Ответить | Цитировать Сообщить модератору
 Ошибка в простейшем запросе  [new]
PavelDart
Member

Откуда:
Сообщений: 197
Уважаемые, подскажите из-за чего не происходит вставка новой строки в таблицу.

вот код:
create or replace procedure main
is

m_id numeric :=0;
m_graph Clob;

begin


m_graph:='0101;0110;0010;0101.';

INSERT INTO graphone (ID,GRAPH) VALUES (m_id,m_graph); 
  

end main;
6 июл 09, 13:07    [7380352]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
Elic
Member

Откуда:
Сообщений: 29976
PavelDart
подскажите из-за чего не происходит вставка новой строки в таблицу.
Это тебе подсказывает сам Oracle соответствующим текстом ошибки. Но только в том случае, если ты вызываешь эту "процедуру"
6 июл 09, 13:12    [7380379]     Ответить | Цитировать Сообщить модератору
 Ошибка в простейшем запросе  [new]
PavelDart
Member

Откуда:
Сообщений: 197
Elic
PavelDart
подскажите из-за чего не происходит вставка новой строки в таблицу.
Это тебе подсказывает сам Oracle соответствующим текстом ошибки. Но только в том случае, если ты вызываешь эту "процедуру"


Мне до конца практики меньше недели осталось - мне сейчас не так весело.
Давайте будем конструктивнее в критике.
6 июл 09, 13:26    [7380491]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
PavelDart
Member

Откуда:
Сообщений: 197
Elic
PavelDart
подскажите из-за чего не происходит вставка новой строки в таблицу.
Это тебе подсказывает сам Oracle соответствующим текстом ошибки. Но только в том случае, если ты вызываешь эту "процедуру"


PL/SQL Developer ошибок не выдаёт - по этому не могу понять в чём ошибка моя.
6 июл 09, 13:28    [7380514]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
Elic
Member

Откуда:
Сообщений: 29976
PavelDart
Давайте будем конструктивнее в критике.
Нередко критика - это скорее намёк :)
RTFM
6 июл 09, 13:28    [7380516]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
Elic
Member

Откуда:
Сообщений: 29976
PavelDart
PL/SQL Developer ошибок не выдаёт - по этому не могу понять в чём ошибка моя.
commit не пробовал?!
6 июл 09, 13:29    [7380533]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
stax..
Guest
PavelDart,
что выдает?
INSERT INTO graphone (ID,GRAPH) VALUES (0,'0101;0110;0010;0101.')
/
.....
stax
6 июл 09, 15:02    [7381262]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
PavelDart
Member

Откуда:
Сообщений: 197
stax..
PavelDart,
что выдает?
INSERT INTO graphone (ID,GRAPH) VALUES (0,'0101;0110;0010;0101.')
/
.....
stax


Конечно, если вбивать через SQL-диалог - всё в порядке. Проблема была, можно сказать есть, в отсутствии результата при вызове процедуры в PL/SQL Developer.

Скорее всего , по крайней мере по этой причине точно, у учётной записи нет, которой я пользуюсь нет прав DBA.
6 июл 09, 16:12    [7381826]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
PavelDart,

без "конечно" и прочих рассуждений приведите, пожалуйста, сюда копипаст выполнения следующего в SQL*Plus:

exec main;
commit;
select * from graphone where id = 0;
6 июл 09, 16:25    [7381950]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
stax..
Guest
PavelDart
stax..
PavelDart,
что выдает?
INSERT INTO graphone (ID,GRAPH) VALUES (0,'0101;0110;0010;0101.')
/
.....
stax


Конечно, если вбивать через SQL-диалог - всё в порядке. Проблема была, можно сказать есть, в отсутствии результата при вызове процедуры в PL/SQL Developer.

Скорее всего , по крайней мере по этой причине точно, у учётной записи нет, которой я пользуюсь нет прав DBA.

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

ps
попробуйте код на табличке созданной в Вашей схеме
.....
stax
6 июл 09, 16:34    [7382050]     Ответить | Цитировать Сообщить модератору
 Ошибка в простейшем запросе  [new]
PavelDart
Member

Откуда:
Сообщений: 197
Благодарю всех за прямую и косвенную помощь.
Ошибка была в отсутствии прав ДБА.

Теперь работает.
6 июл 09, 19:10    [7383040]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
PavelDart
Благодарю всех за прямую и косвенную помощь.
Ошибка была в отсутствии прав ДБА.

Теперь работает.


Однако... Оказывается, чтобы вставить данные в таблицу, нужны права DBA. Сурово у Вас там.
7 июл 09, 00:21    [7383689]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
stax..
Guest
suPPLer
PavelDart
Благодарю всех за прямую и косвенную помощь.
Ошибка была в отсутствии прав ДБА.

Теперь работает.


Однако... Оказывается, чтобы вставить данные в таблицу, нужны права DBA. Сурово у Вас там.

неправда,
достаточно банального
grant insert on graphone to PavelDart


просто ДБА у Вас очень суров

.....
stax
7 июл 09, 11:03    [7384773]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
stax..,

тем не менее, ТС получил заветную роль DBA всего лишь для вставки в таблицу. Если ограничится этим... :)
7 июл 09, 11:22    [7384918]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в простейшем запросе  [new]
stax..
Guest
suPPLer
stax..,

тем не менее, ТС получил заветную роль DBA всего лишь для вставки в таблицу. Если ограничится этим... :)

понимаю

я уж выше написал что очень суров у Вас ДБА

.....
stax
7 июл 09, 11:27    [7384957]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить