posso colocar uma consulta sql em um espaço reservado sql hana

Dec 15 2020

posso colocar uma consulta sql em um espaço reservado sql hana ?

a seguinte consulta funciona:

     Select * From table1
     ('PLACEHOLDER' = ('$$IP_ShipmentDate$$', '2020-01-01'))

Estou tentando passar algo como o seguinte:

      Select * From table1
     ('PLACEHOLDER' = ('$$IP_ShipmentDate$$', 
       Select TO_VARCHAR(min("some_date"),'YYYY-MM-DD') from Table2)

Atualmente recebendo um erro de syntex

Respostas

1 astentx Dec 21 2020 at 16:33

Como erro diz você, expressões não são suportados para o parâmetro vista coluna: Can't use column expression as column view parameter.

No entanto, existem opções para calculá-lo:

  • Se o valor do seu parâmetro estiver semanticamente relacionado a esta visualização calculada (por exemplo, você precisa de algum valor padrão para esta visualização que é calculada com base em alguma lógica), então você pode criar um procedimento armazenado com um parâmetro de saída para calcular o valor e usar o tipo de parâmetro Derivado do procedimento / função escalar . Para tornar esse valor ajustável a partir do frontend, você pode marcá-lo como Input enabled . Ou se o valor calculado for baseado na entrada do usuário, você pode mapear os parâmetros de entrada do procedimento para os parâmetros de entrada da visualização de cálculo na seção Parâmetros / Variáveis ​​-> Procedimentos / Funções escalares para parâmetros de entrada .
create procedure sp_dummy (
  in dummy nvarchar(10) default '0',
  out val nvarchar(10)
)
as begin
  val = to_char(current_date, 'yyyymmdd');
end;

  • Se o valor do seu parâmetro não estiver relacionado à visualização de cálculo e você apenas usar a visualização de cálculo para obter alguns dados para esse valor, poderá usar o recurso de conjunto de resultados do procedimento armazenado / bloco SQLScript. Se o seu executor SQL não tentar analisar a instrução SQL (por exemplo, SAP BO verifica SELECTcomo a primeira palavra SQL após algum SP em diante, portanto, esta forma não será válida para ele) e apenas obtém o conjunto de resultados como metadados para definições de coluna, então você pode evitar objetos extras para envolver a lógica de cálculo.

Para retornar um conjunto de resultados, use uma instrução SELECT porque os blocos anônimos não têm parâmetros definidos.

do begin
  declare lv_param nvarchar(100);
  select max('some_date')
    into lv_param
  from dummy /*your_table*/;
  
  select *
  from "_SYS_BIC"."path.to.your.view/CV_TEST" (
    PLACEHOLDER."$$P_DUMMY$$" => :lv_param
  );
end;

Isso com visão de cálculo com base na tabela RSPCLOGCHAINfiltrada pela saída do procedimento declarado acima me dá

LOG_ID                    | DATUM    | INPUT_PARAM | CUR_DATE
--------------------------+----------+-------------+----------
8FRV39X1O8814X6IJMLPI47PV | 20201221 | some_date   | 20201221
C7S9EY3J0GYA76Y2S9CIA39QR | 20201221 | some_date   | 20201221
35R8A3RFUG00EBY8MZQWJLIXF | 20201221 | some_date   | 20201221
850MVHOJIKIDD7EVY6WFIYPZN | 20201221 | some_date   | 20201221
1 LarsBr. Dec 16 2020 at 11:41

Não, isso não é compatível.

A interface do parâmetro é apenas para cadeias de caracteres . SELECTs ou expressões não serão avaliados pelo HANA.

Para obter parâmetros de seleção dinâmica (digamos, a data atual ou três semanas atrás ), você pode querer definir os valores padrão por meio de procedimentos armazenados ou calcular os valores desejados na ferramenta cliente (front-end).