powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура PL/SQL выгружает не корректные данные
6 сообщений из 6, страница 1 из 1
Процедура PL/SQL выгружает не корректные данные
    #39383801
KofD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, опыта в 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
Процедура PL/SQL выгружает не корректные данные
    #39383976
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Процедура PL/SQL выгружает не корректные данные
    #39384244
KofD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ.

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

В плане соответствующую первым двум? т.е тоже integer?
...
Рейтинг: 0 / 0
Процедура PL/SQL выгружает не корректные данные
    #39384251
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KofDВ плане соответствующую первым двум? т.е тоже integer?Нет, тип данных, соответствующий полю из sql-запроса.
...
Рейтинг: 0 / 0
Процедура PL/SQL выгружает не корректные данные
    #39384349
пробегал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Процедура PL/SQL выгружает не корректные данные
    #39384365
KofD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, спасибо всем, название столбцов во вьюхе было на русском языке, из-за этого выгружался полный бред.
P.S. Это не эротическая вьюха, она на нахождение некорректного пола)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура PL/SQL выгружает не корректные данные
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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