как использовать процедуру в oracle rest data services - PullRequest
0 голосов
/ 01 октября 2019

У меня есть хранимая процедура оракула, как показано ниже:

CREATE OR REPLACE PROCEDURE SABAPAY.omid (ttime OUT VARCHAR2,tYear OUT INTEGER, tMonth OUT INTEGER)
    IS
        year1 NUMBER;
        month1 VARCHAR2 (20);
        month2 NUMBER;
    BEGIN
        SELECT SPT.FISCAL_YEAR, SPT.PAY_MONTH
          INTO year1, month2
          FROM SABAPAY.PAY_TIMEBUCKET spt
         WHERE SPT.IS_CURRENT = '1';
        tyear := year1;
        tmonth := month2;
        ttime := year1 || '  ' || month2;
    END;

Я хочу создать веб-сервис со службами данных oracle rest. Как я могу создать модуль для этого? Я делаю это с помощью приведенного ниже сценария

BEGIN
    ORDS.define_service (p_module_name      => 'testmodule1',
                         p_base_path        => 'testmodule1/',
                         p_pattern          => 'tt/',
                         p_source_type      => 'plsql/block',
                         p_source           => 'DECLARE
    ttime    VARCHAR2 (200);
    tyear    INTEGER;
    tmonth   INTEGER;
BEGIN
    SABAPAY.omid (ttime, tYear, tMonth);

END;',
                         p_items_per_page   => 0);

    COMMIT;
END;

, но когда я запускаю URL, я ничего не получаю, мой сервер служб данных db и oracle rest отделяется

1 Ответ

0 голосов
/ 01 октября 2019

Вы должны определить обработчик, а не просто модуль

-- Generated by Oracle SQL Developer REST Data Services 19.2.1.247.2212
-- Exported REST Definitions from ORDS Schema Version 19.3.0.b2541456
-- Schema: HR   Date: Tue Oct 01 08:32:57 EDT 2019
--
BEGIN
  ORDS.ENABLE_SCHEMA(
      p_enabled             => TRUE,
      p_schema              => 'HR',
      p_url_mapping_type    => 'BASE_PATH',
      p_url_mapping_pattern => 'hr',
      p_auto_rest_auth      => FALSE);    

  ORDS.DEFINE_MODULE(
      p_module_name    => 'so_plsql',
      p_base_path      => '/so_plsql/',
      p_items_per_page =>  25,
      p_status         => 'PUBLISHED',
      p_comments       => NULL);      
  ORDS.DEFINE_TEMPLATE(
      p_module_name    => 'so_plsql',
      p_pattern        => 'do_nothing',
      p_priority       => 0,
      p_etag_type      => 'HASH',
      p_etag_query     => NULL,
      p_comments       => NULL);
  ORDS.DEFINE_HANDLER(
      p_module_name    => 'so_plsql',
      p_pattern        => 'do_nothing',
      p_method         => 'POST',
      p_source_type    => 'plsql/block',
      p_items_per_page =>  0,
      p_mimes_allowed  => '',
      p_comments       => NULL,
      -- your SABAPAY.omid (ttime, tYear, tMonth); codes goes here
      p_source         => 
'begin
 do_nothing();
end;'
      );


  COMMIT; 
END;

Я реализовал это как обработчик POST для моего HTTP-вызова, потому что я не уверен, что делает ваша хранимая процедура - если она делаетлюбые изменения в вашей системе, вероятно, это не должен быть GET.

Если это не GET, вам нужно будет использовать cURL или POSTMAN (GUI) для выполнения вызова POST при тестировании.

У меня есть еще примеры здесь .

...