Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура PL/SQL выгружает не корректные данные / 6 сообщений из 6, страница 1 из 1
13.01.2017, 10:04
    #39383801
KofD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура PL/SQL выгружает не корректные данные
Добрый день, опыта в PL/SQL практически нет, и эта по сути моя первая процедура (делал с некоторой помощью), при запуске процедуры открывая выгруженный .csv файл в нём вместо нужной информации просто набор одинаковых символов, может кто-нибудь знает, в чём проблема?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
create or replace PROCEDURE PRC_ERR_SEX
IS
  sql_str CLOB;
  v_file UTL_FILE.FILE_TYPE;
  l_row CLOB;
  v_cursor INTEGER;
  v_rows   INTEGER;
BEGIN
sql_str:='select * from V_ERR_SEX';
v_file := UTL_FILE.FOPEN_NCHAR('ANALYST_REP_DATA','TRUESEX.csv','W',32767);
DBMS_OUTPUT.put_line ('sql_str='||sql_str);
  v_cursor := DBMS_SQL.OPEN_CURSOR;
  DBMS_SQL.PARSE(v_cursor, sql_str, DBMS_SQL.NATIVE);
  dbms_sql.define_column(v_cursor, 1, l_row);
  v_rows := DBMS_SQL.EXECUTE(v_cursor);
  --
  LOOP
    IF dbms_sql.Fetch_Rows(v_cursor) = 0 THEN
      EXIT;
    ELSE
      dbms_sql.column_value(v_cursor, 1, l_row);
      BEGIN
        UTL_FILE.PUT_LINE_NCHAR(v_file, l_row);
      EXCEPTION
      WHEN OTHERS THEN
        NULL;
      END;
    END IF;
  END LOOP;
  BEGIN
    UTL_FILE.FCLOSE(v_file);
  EXCEPTION
  WHEN OTHERS THEN
    NULL;
  END;
  DBMS_SQL.CLOSE_CURSOR(v_cursor);
END PRC_ERR_SEX;
...
Рейтинг: 0 / 0
13.01.2017, 12:13
    #39383976
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура PL/SQL выгружает не корректные данные
1) Убери проглатывания ошибок
Код: plsql
1.
2.
3.
WHEN OTHERS THEN
    NULL;
END;


2) Сделай debuging своей процедуры, например через dbms_output.
3) Далее, что бросается в глаза, разные типы данных (в общем случае разные кодировки):
Код: plsql
1.
2.
3.
l_row CLOB;
...
UTL_FILE.PUT_LINE_NCHAR(v_file, l_row);


4) Не забывай, что в define_column и column_value третьим параметром надо передавать переменную соответствующего типа, а не clob-а, как "универсального" типа данных. Ключевое слово - describe_columns.
5) Начиная с 11-ой версии sys_refcursor + to_cursor_number позволяют уйти от использования динамического SQL.
6) Рекомендую использовать режим работы с файлом wb вместо w.
...
Рейтинг: 0 / 0
13.01.2017, 15:13
    #39384244
KofD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура PL/SQL выгружает не корректные данные
Спасибо за ответ.

автор4) Не забывай, что в define_column и column_value третьим параметром надо передавать переменную соответствующего типа, а не clob-а, как "универсального" типа данных. Ключевое слово - describe_columns.

В плане соответствующую первым двум? т.е тоже integer?
...
Рейтинг: 0 / 0
13.01.2017, 15:17
    #39384251
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура PL/SQL выгружает не корректные данные
KofDВ плане соответствующую первым двум? т.е тоже integer?Нет, тип данных, соответствующий полю из sql-запроса.
...
Рейтинг: 0 / 0
13.01.2017, 16:41
    #39384349
пробегал
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура PL/SQL выгружает не корректные данные
KofD,

ужос на..
попробуй так.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or replace
PROCEDURE PRC_ERR_SEX
IS
  v_file UTL_FILE.FILE_TYPE;
BEGIN
  v_file := UTL_FILE.FOPEN('ANALYST_REP_DATA','TRUESEX.csv','W',32767);
  FOR c in (select * from V_ERR_SEX) LOOP    
       UTL_FILE.PUT_LINE(v_file, c.col1||';'||c.col2);
  END LOOP;
  UTL_FILE.FCLOSE(v_file);
EXCEPTION WHEN OTHERS THEN
  dbms_output,put_line(sqlerrm);
  UTL_FILE.FCLOSE(v_file);
END PRC_ERR_SEX;



col1, col2 - это столбцы твоей эротическкой вьюшки
...
Рейтинг: 0 / 0
13.01.2017, 16:53
    #39384365
KofD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура PL/SQL выгружает не корректные данные
Всё, спасибо всем, название столбцов во вьюхе было на русском языке, из-за этого выгружался полный бред.
P.S. Это не эротическая вьюха, она на нахождение некорректного пола)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура PL/SQL выгружает не корректные данные / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]