powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Добавка
5 сообщений из 5, страница 1 из 1
Добавка
    #32026802
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно верно! Уважаемый vSkv просто видел создание этого чуда! В Developer можно использовать более 1-го соединения. Я бы сказал можно использовать много соединений одновременно. К сожалению, я не нашел другого способа, не иначе как динамический SQL. Эта штука правда не неписана в той самой книжке о которой говорит мой коллега. В Developer существует пакет EXEC_SQL очень (!!!) похожий на пакет SYS.DBMS_SQL (вот он как раз и описан в той самой чудной книжке). Вот все, что вспомнил... в отпуске и нет книжки под рукой :
1. открываем соеднение и сохраняем его идентификатор в переменной (вроде функция EXEC_SQL.OPEN_CONNECTION(<connect string&gt возвращает NUMBER)
2. открываем курсор в пределах соединения (функция EXEC_SQL.OPEN_CURSOR(<ConID&gt возвращает NUMBER)
3. парсим запрос (процедура EXEC_SQL.PARSE(<ConID>, <SQLString&gt )
4. размечаем вывод запроса (EXEC_SQL.BIND_COLOUMN)
5. загоняем входные параметры (EXEC_SQL.BIND_VARIABLE)
6. запускаем запрос (функция EXEC_SQL.EXECUTE(<ConID>, <CursorID&gt возвращает NUMBER - не пользуюсь этим значением, вроде число записей в курсоре)
7. считываем запись (функция EXEC_SQL.FETCH_ROWS(<ConID>, <CursorID&gt возвращает NUMBER, если вернула 0, то записей больше нет)
8. считываем выходные данные (EXEC_SQL.VALUE_COLOUMN)

Простите за ошибку, мог и ошибиться, главное идею я здесь раскрыл.

Какие вопросы меня мучат с этой OCA:
1. Можно ли постоянно менять главный коннект формы, то на одно соединение, то на другое?
2. Можно ли через ODBC открыть любую DBF не находящуюся в рабочей директории, если путь к файлу известен?
...
Рейтинг: 0 / 0
Добавка
    #32026803
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В очередной раз спутал кнопки по смыслу: Новое и Ответить!

Простите великодушно
...
Рейтинг: 0 / 0
Добавка
    #32026804
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В очередной раз спутал кнопки по смыслу: Новое и Ответить!

Простите великодушно
...
Рейтинг: 0 / 0
Добавка
    #32026871
INSERT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот и примерчик:

PROCEDURE getData IS
-- a connection handle must have a datatype of EXEC_SQL.conntype
connection_id EXEC_SQL.CONNTYPE;
BEGIN
-- a connection string is typically of the form 'username/password@database_alias'
connection_id := EXEC_SQL.OPEN_CONNECTION('connection_string');
END;
...
Рейтинг: 0 / 0
Добавка
    #32028013
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот примерчик, так примерчик:

DECLARE
v_alert NUMBER;
v_recid btb_alga_file.recid%TYPE;

v_connect EXEC_SQL.CONNTYPE;
v_cursor EXEC_SQL.CURSTYPE;
v_sql VARCHAR2(500);
v_dbfcnt NUMBER;
v_exec NUMBER;
v_flag BOOLEAN;

t_amount NUMBER;
t_p_kod VARCHAR2(20);
t_count NUMBER;

v_fcnt NUMBER;
v_fwrn NUMBER;
v_ferr NUMBER;
v_rstat CHAR(1);
v_list NUMBER;
v_plist PARAMLIST;
BEGIN
-- Check for all fields are filled
IF :BTBM0007.BANK_C IS NULL OR :BTBM0007.GROUPC IS NULL OR :BTBM0007.CCY IS NULL OR :BTBM0007.CMP_CODE IS NULL OR :BTBM0007.FILEID IS NULL OR :BTBM0007.SLIP_NR IS NULL THEN
SET_ALERT_PROPERTY('ERROR', ALERT_MESSAGE_TEXT, 'All fileds must be entered!');
v_alert := SHOW_ALERT('ERROR');
ELSE
-- Create DBF file descriptor
SELECT btb_alga_file_seq0.NEXTVAL INTO v_recid FROM dual;
INSERT INTO btb_alga_file (recid, bank_c, groupc, ccy, emp_code, slip_nr, fileid) VALUES (v_recid, :BTBM0007.BANK_C, :BTBM0007.GROUPC, :BTBM0007.CCY, :BTBM0007.CMP_CODE, :BTBM0007.SLIP_NR, :BTBM0007.FILEID);
MESSAGE('DBF file descriptor created. RECID = ' || TO_CHAR(v_recid), NO_ACKNOWLEDGE);

-- Open DBF DataBase
v_connect := EXEC_SQL.OPEN_CONNECTION('SYSTEM/MANAGER@ODBC:BTB_ALGA');
MESSAGE('DBF DataBase opened for import data.', NO_ACKNOWLEDGE);

-- Count records in DBF file (table)
v_cursor := EXEC_SQL.OPEN_CURSOR(v_connect);
v_sql := 'SELECT COUNT(*) FROM '|| :BTBM0007.FILEID;
EXEC_SQL.PARSE(v_connect, v_cursor, v_sql);
EXEC_SQL.DEFINE_COLUMN(v_connect, v_cursor, 1, v_dbfcnt);
v_exec := EXEC_SQL.EXECUTE_AND_FETCH(v_connect, v_cursor, v_flag);
EXEC_SQL.COLUMN_VALUE(v_connect, v_cursor, 1, v_dbfcnt);
EXEC_SQL.CLOSE_CURSOR(v_cursor);
MESSAGE('Found ' || v_dbfcnt || ' rows in DBF file.', NO_ACKNOWLEDGE);

-- Import records from DBF into Oracle
v_cursor := EXEC_SQL.OPEN_CURSOR(v_connect);
v_sql := 'SELECT AMOUNT, P_KOD FROM ' || :BTBM0007.FILEID;
EXEC_SQL.PARSE(v_connect, v_cursor, v_sql);
EXEC_SQL.DEFINE_COLUMN(v_connect, v_cursor, 1, t_amount);
EXEC_SQL.DEFINE_COLUMN(v_connect, v_cursor, 2, t_p_kod, 20);
v_exec := EXEC_SQL.EXECUTE(v_connect, v_cursor);
t_count := 0;
P_PROGRESS_INIT(0, v_dbfcnt);

SET_ALERT_PROPERTY('INFORM', ALERT_MESSAGE_TEXT, 'FORM starts DBF file records loading. Press OK button and wait.');
v_alert := SHOW_ALERT('INFORM');

set_item_property('BTBM0007.BN_UNLOAD', enabled, property_false);
set_item_property('BTBM0007.BN_PROCESS', enabled, property_false);

UPDATE btb_alga_file SET status = 'B' WHERE recid = v_recid;
--ORA_PROF.STOP_TIMER('BTB_TIMER');
WHILE EXEC_SQL.FETCH_ROWS(v_connect, v_cursor) > 0 LOOP
EXEC_SQL.COLUMN_VALUE(v_connect, v_cursor, 1, t_amount);
EXEC_SQL.COLUMN_VALUE(v_connect, v_cursor, 2, t_p_kod);
t_amount := t_amount * power(10, F_CCY_EXP(:BTBM0007.CCY));
INSERT INTO btb_alga_file_desc (recid, p_kod, amount) VALUES (v_recid, t_p_kod, t_amount);
P_PROGRESS_NEXT;
t_count := t_count + 1;
MESSAGE( 'Record loaded from DBF file: ' || TO_CHAR(t_count) || ': ' || t_p_kod || ' - ' || TO_CHAR(t_amount), NO_ACKNOWLEDGE);
END LOOP;
--ORA_PROF.START_TIMER('BTB_TIMER');
EXEC_SQL.CLOSE_CURSOR(v_cursor);
EXEC_SQL.CLOSE_CONNECTION(v_connect);
SET_ALERT_PROPERTY('INFORM', ALERT_MESSAGE_TEXT, 'DBF file loading complette.');
v_alert := SHOW_ALERT('INFORM');

SELECT COUNT(*) INTO v_fcnt FROM btb_alga_file_desc WHERE recid = v_recid;
SELECT COUNT(*) INTO v_fwrn FROM btb_alga_file_desc WHERE recid = v_recid AND status = 'B';
SELECT COUNT(*) INTO v_ferr FROM btb_alga_file_desc WHERE recid = v_recid AND status = 'C';
v_fcnt := NVL(v_fcnt, 0);
v_fwrn := NVL(v_fwrn, 0);
v_ferr := NVL(v_ferr, 0);

IF v_fwrn > 0 AND v_ferr > 0 THEN
SET_ALERT_PROPERTY('ERROR', ALERT_MESSAGE_TEXT, 'Found errors and warnings. File cannot be processed into Issuing 2.0.');
v_alert := SHOW_ALERT('ERROR');
v_rstat := 'E';
ELSIF v_fwrn > 0 THEN
SET_ALERT_PROPERTY('INFORM', ALERT_MESSAGE_TEXT, 'Found warnings. File may be processed into Issuing 2.0. But only if it is a new company or you are shure that it is correct.');
v_alert := SHOW_ALERT('INFORM');
v_rstat := 'D';
SET_ALERT_PROPERTY('WARNING', ALERT_MESSAGE_TEXT, 'If it is a new company, then do you want to make workers list permanent?');
IF SHOW_ALERT('WARNING') = ALERT_BUTTON1 THEN
BTB_ALGA.P_MAKE_WORKERS_PERMANENT(v_recid);
END IF;
ELSIF v_ferr > 0 THEN
SET_ALERT_PROPERTY('ERROR', ALERT_MESSAGE_TEXT, 'Found errors. File cannot be processed into Issuing 2.0.');
v_alert := SHOW_ALERT('ERROR');
v_rstat := 'E';
ELSE
SET_ALERT_PROPERTY('INFORM', ALERT_MESSAGE_TEXT, 'File loaded successfully without any errors and warnings.');
v_alert := SHOW_ALERT('INFORM');
v_rstat := 'C';
END IF;

UPDATE btb_alga_file SET status = v_rstat WHERE recid = v_recid;
:SYSTEM.MESSAGE_LEVEL := 10;
COMMIT;
:SYSTEM.MESSAGE_LEVEL := 5;

v_plist := GET_PARAMETER_LIST('BTB_PARAMETER');
IF NOT ID_NULL(v_plist) THEN
DESTROY_PARAMETER_LIST(v_plist);
END IF;
v_plist := CREATE_PARAMETER_LIST('BTB_PARAMETER');
ADD_PARAMETER(v_plist, 'P_RECID', TEXT_PARAMETER, TO_CHAR(v_recid));
RUN_PRODUCT(REPORTS, 'BTBR0007', SYNCHRONOUS, RUNTIME, FILESYSTEM, v_plist, NULL);
END IF;

v_list := POPULATE_GROUP('RGRP_FILE_LOAD');
POPULATE_LIST('LIST_LOAD', 'RGRP_FILE_LOAD');
v_list := POPULATE_GROUP('RGRP_FILE_PROCESS');
POPULATE_LIST('LIST_PROCESS', 'RGRP_FILE_PROCESS');


set_item_property('BTBM0007.BN_UNLOAD', enabled, property_true);
set_item_property('BTBM0007.BN_PROCESS', enabled, property_true);
EXCEPTION
WHEN OTHERS THEN
EXEC_SQL.CLOSE_CURSOR(v_cursor);
EXEC_SQL.CLOSE_CONNECTION(v_connect);

MESSAGE(SQLERRM || '>>> ' || to_char(t_amount) || ' : ' || t_p_kod);
MESSAGE(SQLERRM || '>>> ' || to_char(t_amount) || ' : ' || t_p_kod);

set_item_property('BTBM0007.BN_UNLOAD', enabled, property_true);
set_item_property('BTBM0007.BN_PROCESS', enabled, property_true);
END;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Добавка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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