¿Puedo colocar una consulta sql en un marcador de posición sql hana?

Dec 15 2020

¿Puedo colocar una consulta sql en un marcador de posición sql hana ?

la siguiente consulta funciona:

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

Estoy intentando pasar algo como lo siguiente:

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

Actualmente obteniendo un error de sintaxis

Respuestas

1 astentx Dec 21 2020 at 16:33

Como error que dice, expresiones que no son compatibles con los parámetros de visualización por columnas: Can't use column expression as column view parameter.

Sin embargo, existen opciones para calcularlo:

  • Si el valor de su parámetro está relacionado semánticamente con esta vista calculada (por ejemplo, necesita algún valor predeterminado para esta vista que se calcula en base a alguna lógica), entonces puede crear un procedimiento almacenado con un parámetro de salida para calcular el valor y usar el tipo de parámetro Derivado de procedimiento / función escalar . Para que ese valor sea ajustable desde la interfaz, puede marcarlo como Entrada habilitada . O si el valor calculado se basa en la entrada del usuario, puede asignar los parámetros de entrada del procedimiento a los parámetros de entrada de la vista de cálculo en la sección Parámetros / Variables -> Procedimientos / Funciones escalares para los 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;

  • Si el valor de su parámetro no está relacionado con la vista de cálculo y solo usa la vista de cálculo para obtener algunos datos para ese valor, puede usar la función de conjunto de resultados del procedimiento almacenado / bloque SQLScript. Si su ejecutor SQL no intenta analizar la declaración SQL (por ejemplo, SAP BO busca SELECTcomo la primera palabra SQL después de algún SP en adelante, por lo que esta forma no será válida para ella) y solo obtiene el conjunto de resultados como metadatos para las definiciones de columna, entonces puede evitar un objeto adicional para ajustar la lógica de cálculo.

Para devolver un conjunto de resultados, use una instrucción SELECT porque los bloques anónimos no tienen ningún parámetro definido.

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;

Eso con la vista de cálculo basada en la tabla RSPCLOGCHAINfiltrada por la salida del procedimiento declarado anteriormente me da

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

No, eso no es compatible.

La interfaz de parámetros es solo para cadenas de caracteres . HANA no evaluará SELECT ni expresiones.

Para lograr parámetros de selección dinámica (digamos, la fecha actual o hace tres semanas ), es posible que desee establecer los valores predeterminados a través de procedimientos almacenados o calcular los valores deseados en la herramienta del cliente (front-end).