Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Create table as select необходимо преобразование Varchar2 на Varchar2(10)  [new]
Ako_loz
Member

Откуда:
Сообщений: 5
Функция AAAA возвращает varchar2 из блоба

Используется в конструкции

create table BBBB as select n,....nn from select функция АААА n

Так вот все былоб ничего, если б не выбор таблицы BBBB через ODBC в таблицы Foxpro
и получается, что на выходе в таблицах фохпро экспортируется (n,....nn) в мемо поля а нужны символьные длиной 10, 2, 15......

В общем, нужно преобразование
create table BBBB as select (n,....nn)->varchar2(10) from select функция АААА

Подскажите, как сделать
29 фев 12, 19:26    [12172998]     Ответить | Цитировать Сообщить модератору
 Re: Create table as select необходимо преобразование Varchar2 на Varchar2(10)  [new]
Elic
Member

Откуда:
Сообщений: 29990
RTFM CAST
29 фев 12, 19:29    [12173001]     Ответить | Цитировать Сообщить модератору
 Re: Create table as select необходимо преобразование Varchar2 на Varchar2(10)  [new]
Ako_loz
Member

Откуда:
Сообщений: 5
функция bestzvit.getlob_num1 возвращает VARCHAR2 если сипользую
SELECT platnyky.kod, platnyky.NAME,pdv.perdate,cast(pdv.a2 as varchar2(10)) as a2,pdv.a10
необходимо совпадение типов
вызов - getlob_num1 ('TAB1_A2', a.code,1,0) a2,
в
lob_value varchar2(10);

при отработке

DROP TABLE AAA_1UR
*
ERROR at line 1:
ORA-00942: table or view does not exist


getlob_num1 ('TAB1_A2', a.code,1,0) a2,
*
ERROR at line 10:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "BESTZVIT.GETLOB_NUM1", line 33
ORA-06512: at line 1



Table dropped.

getlob_num1 ('TAB1_A2', a.code,1,0) a2,
*
ERROR at line 10:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "BESTZVIT.GETLOB_NUM1", line 33
ORA-06512: at line 1

полный пример

set newpage none
set verify off
set linesize 500
set pagesize 10000
set heading off
set colsep ";"
DEFINE date1=to_date('01.'||'&2'||'.'||'&3','DD.MM.YYYY')
DEFINE date2=to_date('01.'||'&4'||'.'||'&5','DD.MM.YYYY')
DEFINE sti=&1

CREATE OR REPLACE
FUNCTION bestzvit.getlob_num (
par2 IN VARCHAR2,
code1 IN card.code%TYPE,
tab1 IN cardval.tab%TYPE := 0,
line1 IN cardval.line%TYPE := 0
)
RETURN NUMBER
IS
-- возвращает числовое значение из BESTZVIT.CARDVAL
-- par2 - идентификатор параметра
-- code1 - значение из BESTZVIT.CARD
lob_value NUMBER;
BEGIN

EXECUTE IMMEDIATE 'SELECT workbyblob.getlobvalue (:par2, b.val, 1, 3)
FROM cardval b
WHERE b.card = :code1 AND b.tab = :tab1 AND b.line = :line1'
INTO lob_value
USING par2, code1, tab1, line1;

RETURN lob_value;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SUBSTR ( 'Error '
|| TO_CHAR (SQLCODE)
|| ': '
|| SQLERRM,
1,
255
)
);
RAISE;
END;
/

CREATE OR REPLACE
FUNCTION bestzvit.getlob_num1(
par2 IN VARCHAR2,
code1 IN card.code%TYPE,
tab1 IN cardval.tab%TYPE := 0,
line1 IN cardval.line%TYPE := 0
)
RETURN varchar2
IS
-- возвращает числовое значение из BESTZVIT.CARDVAL
-- par2 - идентификатор параметра
-- code1 - значение из BESTZVIT.CARD
lob_value varchar2(10);
BEGIN

EXECUTE IMMEDIATE 'SELECT workbyblob.getlobvalue (:par2, b.val, 1, 3)
FROM cardval b
WHERE b.card = :code1 AND b.tab = :tab1 AND b.line = :line1'
INTO lob_value
USING par2, code1, tab1, line1;

RETURN lob_value;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SUBSTR ( 'Error '
|| TO_CHAR (SQLCODE)
|| ': '
|| SQLERRM,
1,
255
)
);
RAISE;
END;
/

spool a.log

DROP TABLE AAA_1UR;

CREATE TABLE AAA_1UR AS
SELECT platnyky.kod, platnyky.NAME,pdv.perdate,cast(pdv.a2 as varchar2(10)) as a2,pdv.a10
FROM (SELECT TRIM (TO_CHAR (a.tin, '9900000000')) kod,
a.NAME,a.c_stan
FROM r21taxpay a
WHERE a.c_sti_main = &sti
AND a.c_sti = a.c_sti_main
ORDER BY a.tin) platnyky,
(SELECT a.edrpou,a.perdate,
getlob_num1 ('TAB1_A2', a.code,1,0) a2,
getlob_num ('TAB1_A10', a.code,1,0) a10
FROM bestzvit.card a
WHERE (BITAND (a.flags, 16) = 0)
AND ((a.perdate >= &date1) AND (a.perdate <= &date2))
AND (a.form IN (SELECT b.code FROM bestzvit.form b WHERE CHARCODE IN
('J0202503','J0202504')))) pdv
WHERE (platnyky.kod = pdv.edrpou);

DROP TABLE AAA_2UR;

CREATE TABLE AAA_2UR AS
SELECT platnyky.kod, platnyky.NAME,pdv.perdate,pdv.a2,pdv.a10
FROM (SELECT TRIM (TO_CHAR (a.tin, '9900000000')) kod,
a.NAME,a.c_stan
FROM r21taxpay a
WHERE a.c_sti_main = &sti
AND a.c_sti = a.c_sti_main
ORDER BY a.tin) platnyky,
(SELECT a.edrpou,a.perdate,
getlob_num1 ('TAB1_A2', a.code,1,0) a2,
getlob_num ('TAB1_A10', a.code,1,0) a10
FROM bestzvit.card a
WHERE (BITAND (a.flags, 16) = 0)
AND ((a.perdate >= &date1) AND (a.perdate <= &date2))
AND (a.form IN (SELECT b.code FROM bestzvit.form b WHERE CHARCODE IN
('F0202503','F0202504')))) pdv
WHERE (platnyky.kod = pdv.edrpou);
spool off


disconnect
quit
29 фев 12, 21:25    [12173368]     Ответить | Цитировать Сообщить модератору
 Re: Create table as select необходимо преобразование Varchar2 на Varchar2(10)  [new]
Alert.log
Guest
Ako_loz,

я понимаю, что ВЫ из налоговой, НО можно ли по советски объяснить что вы хотите сделать???
29 фев 12, 22:38    [12173554]     Ответить | Цитировать Сообщить модератору
 Re: Create table as select необходимо преобразование Varchar2 на Varchar2(10)  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Alert.log
Ako_loz,

я понимаю, что ВЫ из налоговой, НО можно ли по советски объяснить что вы хотите сделать???

читать умеете? если да, то читайте про sql-функцию cast
1 мар 12, 02:30    [12174140]     Ответить | Цитировать Сообщить модератору
 Re: Create table as select необходимо преобразование Varchar2 на Varchar2(10)  [new]
Ako_loz
Member

Откуда:
Сообщений: 5
Да из налоговой, но это не повод для шуток, это просто работа.
1 мар 12, 12:09    [12175588]     Ответить | Цитировать Сообщить модератору
 Re: Create table as select необходимо преобразование Varchar2 на Varchar2(10)  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9271
Alert.log
я понимаю, что ВЫ из налоговой, НО можно ли по советски объяснить что вы хотите сделать???

+миллион. Я тоже не понял.

Cast проблему решил или нет?
1 мар 12, 13:37    [12176528]     Ответить | Цитировать Сообщить модератору
 Re: Create table as select необходимо преобразование Varchar2 на Varchar2(10)  [new]
Ako_loz
Member

Откуда:
Сообщений: 5
Нет, проблема не решена cast НЕ ПОДОШОЛ.

ИЗВИНЯЮСЬ, ЧТО НЕ СРАЗУ ОТВЕЧАЮ работа.

проблема остаётся в силе.

1. Без cast всё работает, но Varchar2 в чистом виде никак.

2. При:
lob_value varchar2(100);

в функции bestzvit.getlob_num1 а в

CREATE TABLE AAA_1UR AS
SELECT platnyky.kod, platnyky.NAME,pdv.perdate,cast(pdv.a2 as varchar2(10)) as a2,pdv.a10

cast(pdv.a2 as varchar2(10))

ошибка:
getlob_num1 ('TAB1_A2', a.code,1,0) a2,
*
ERROR at line 10:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 1

3. При совпадении
lob_value varchar2(10);
и
CREATE TABLE AAA_1UR AS
SELECT platnyky.kod, platnyky.NAME,pdv.perdate,cast(pdv.a2 as varchar2(10)) as a2,pdv.a10

ошибка:

getlob_num1 ('TAB1_A2', a.code,1,0) a2,
*
ERROR at line 10:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "BESTZVIT.GETLOB_NUM1", line 33
ORA-06512: at line 1
1 мар 12, 15:00    [12177318]     Ответить | Цитировать Сообщить модератору
 Re: Create table as select необходимо преобразование Varchar2 на Varchar2(10)  [new]
Ako_loz
Member

Откуда:
Сообщений: 5
Может кто нибудь из спецов посмотрит код?
2 мар 12, 19:34    [12185977]     Ответить | Цитировать Сообщить модератору
 Re: Create table as select необходимо преобразование Varchar2 на Varchar2(10)  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Ako_loz
Может кто нибудь из спецов посмотрит код?

какой павлин-мавлин код? где? то что вы явили - понос какой-то.
напрягитесь и сформулируйте вменяемый тесткейс
2 мар 12, 23:06    [12186657]     Ответить | Цитировать Сообщить модератору
 Re: Create table as select необходимо преобразование Varchar2 на Varchar2(10)  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
Ako_loz,

А сделать отдельно
create table ...;
insert into ...;
Почему не подходит?
3 мар 12, 08:34    [12187215]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить