SAP Tutorial de script SQL do HANA: Sintaxe e exemplos

โšก Resumo Inteligente

Script SQL em SAP O HANA estende o SQL padrรฃo com construรงรตes funcionais e procedimentais. Ele potencializa procedimentos armazenados e funรงรตes definidas pelo usuรกrio, movendo a lรณgica de uso intensivo de dados do servidor de aplicativos para o banco de dados.

  • ๐Ÿงฉ Definiรงรฃo Essencial: Uma coleรงรฃo de extensรตes do SQL usadas dentro de procedimentos armazenados em vez de instruรงรตes SQL simples.
  • ๐Ÿ“ฆ Dois recipientes: Os procedimentos descrevem uma sequรชncia de transformaรงรตes; as funรงรตes definidas pelo usuรกrio podem ser em formato escalar ou tabular.
  • ๐Ÿง  Lรณgica Declarativa: Define tipos de tabela sem fazer referรชncia a tabelas de banco de dados e emite instruรงรตes SELECT comuns.
  • ๐ŸŽผ Lรณgica de orquestraรงรฃo: Implementa o fluxo de dados com instruรงรตes DDL, DML e de consulta, alรฉm de loops e condicionais.
  • ๐Ÿ”€ Lรณgica Imperativa: Os loops IF, ELSEIF, ELSE, CASE, FOR e o tratamento de exceรงรตes dividem a lรณgica em fluxos de dados.
  • ๐Ÿ“ค Mรบltiplas Saรญdas: Um procedimento de script SQL retorna vรกrios resultados por meio de parรขmetros OUTPUT, diferentemente de um procedimento SQL simples.
  • โšก Execuรงรฃo Paralela: Instruรงรตes independentes sรฃo executadas em paralelo pelo mecanismo de cรกlculo.

Script SQL em SAP HANA

O que รฉ script SQL?

SQL Script รฉ uma coleรงรฃo de extensรตes para SQL. Ele pode ser usado em procedimento armazenado no lugar de SQL simples. Determina as extensรตes funcionais e procedimentais.

In SQL O usuรกrio do script pode definir variรกveis โ€‹โ€‹locais para estruturas e tabelas que sรฃo usadas principalmente para a criaรงรฃo de procedimentos armazenados.

O script SQL tambรฉm pode ser usado na visualizaรงรฃo Cรกlculo. No SQL Script, existem dois contรชineres lรณgicos diferentes-

  • Procedimento (Procedimentos permite descrever uma sequรชncia de transformaรงรตes de dados em dados passados โ€‹โ€‹como tabelas de entrada e de banco de dados).
  • Funรงรฃo definida pelo usuรกrio (o contรชiner de funรงรฃo definida pelo usuรกrio รฉ separado em funรงรฃo escalar definida pelo usuรกrio e funรงรฃo definida pelo usuรกrio de tabela).

Os elementos da linguagem de script SQL sรฃo os seguintes โ€“

Lรณgica de script SQL declarativa (extensรฃo funcional)

  • Permite a definiรงรฃo de tipos de tabelas sem fazer referรชncia a tabelas de banco de dados.
  • Instruรงรฃo tรญpica como SELECTs.
  • Funรงรตes do mecanismo de cรกlculo (CE).

โš ๏ธ Nota sobre a versรฃo: Os operadores de plano do mecanismo de cรกlculo, as funรงรตes CE_, como CE_COLUMN_TABLE e CE_JOIN, estรฃo obsoletos. SAPNovos desenvolvimentos devem usar instruรงรตes SQL padrรฃo, que o otimizador processa pelo menos tรฃo bem. O cรณdigo CE existente ainda funciona, mas deve ser migrado quando um procedimento for alterado.

Lรณgica de script SQL de orquestraรงรฃo (extensรฃo funcional)

A lรณgica de orquestraรงรฃo รฉ usada para implementar o fluxo de dados usando instruรงรตes de consulta DDL, DML e SQL e controlar a lรณgica de fluxo usando construรงรตes de linguagem imperativas, como loops e condicionais.

  • Declaraรงรฃo de linguagem de definiรงรฃo de dados. Por exemplo, criar esquema.
  • Linguagem de manipulaรงรฃo de dados (por exemplo, inserรงรฃo).

Lรณgica de script SQL imperativa (extensรฃo processual)

A lรณgica imperativa divide a lรณgica entre vรกrios fluxos de dados. Por exemplo, IF, ELSEIF, ELSE, CASE, FOR (Loop) e Exceรงรตes.

Importรขncia do script SQL

Somente o SQL Script fornece os elementos necessรกrios para migrar a lรณgica com uso intensivo de dados ou a operaรงรฃo do servidor de aplicativos para o servidor de banco de dados.

Pontos-chave do script SQL

  • O SQL Script รฉ executado e processado no mecanismo de cรกlculo do banco de dados HANA.
  • SQL Script รฉ capaz de realizar cรกlculos complexos.
  • No SQL Script, uma variรกvel local pode ser declarada para armazenar o resultado provisรณrio.
  • O procedimento de script SQL pode retornar mais resultados usando o โ€œparรขmetro de saรญdaโ€, enquanto o procedimento SQL normal pode retornar apenas um.
  • No SQL Script, vocรช pode definir tipos de tabelas globais ou locais que podem ser usadas como parรขmetros.

Usando SQL Script, o modo de processamento paralelo pode ser alcanรงado.

Exemplo de procedimento em script SQL

Um procedimento รฉ o contรชiner mais comum. O exemplo abaixo lรช dados de funcionรกrios, filtra-os e retorna o resultado por meio de um parรขmetro de tabela de saรญda.

CREATE PROCEDURE DHK_SCHEMA.GET_HIGH_EARNERS (
  IN  im_min_salary DECIMAL(15,2),
  OUT ex_employees  TABLE (EMP_NAME NVARCHAR(100), SALARY DECIMAL(15,2)),
  OUT ex_row_count  INTEGER
)
LANGUAGE SQLSCRIPT
READS SQL DATA
AS
BEGIN
  -- Declarative logic: a table variable, not a physical table
  lt_all = SELECT EMP_NAME, SALARY
             FROM DHK_SCHEMA.EMPLOYEE
            WHERE SALARY >= :im_min_salary;

  -- Imperative logic: branch on the result
  SELECT COUNT(*) INTO ex_row_count FROM :lt_all;

  IF :ex_row_count = 0 THEN
    ex_employees = SELECT '' AS EMP_NAME, 0 AS SALARY FROM DUMMY WHERE 1 = 0;
  ELSE
    ex_employees = SELECT * FROM :lt_all ORDER BY SALARY DESC;
  END IF;
END;

Trรชs convenรงรตes merecem ser observadas. Dois pontos (:) precedem qualquer leitura de uma variรกvel, entรฃo :lt_all lรช a variรกvel da tabela enquanto lt_all O comando ร  esquerda atribui a ele. READS SQL DATA informa ao otimizador que o procedimento nรฃo tem efeitos colaterais, o que permite uma paralelizaรงรฃo mais agressiva. E um procedimento que retorna vรกrios parรขmetros de saรญda รฉ exatamente a capacidade que o SQL puro nรฃo possui.

Ligar para isso รฉ simples:

CALL DHK_SCHEMA.GET_HIGH_EARNERS (50000, ?, ?);

Funรงรตes definidas pelo usuรกrio, escalares e tabulares

Enquanto um procedimento executa aรงรตes, uma funรงรฃo retorna um valor e pode ser usada dentro de uma consulta. O SQL Script oferece duas formas, e elas nรฃo sรฃo intercambiรกveis.

Parรขmetro UDF escalar UDF de tabela
Returns Um รบnico valor Um conjunto de resultados
Usado em Lista SELECT, clรกusula WHERE, expressรตes A clรกusula FROM, como uma tabela
ร‰ possรญvel modificar os dados. Nรฃo Nรฃo
Uso tรญpico Cรกlculo reutilizรกvel, como uma taxa de imposto. Visualizaรงรฃo parametrizada que retorna linhas filtradas
-- Scalar function: returns one value
CREATE FUNCTION DHK_SCHEMA.ADD_BONUS (im_salary DECIMAL(15,2))
  RETURNS total DECIMAL(15,2)
  LANGUAGE SQLSCRIPT AS
BEGIN
  total := :im_salary * 1.10;
END;

SELECT EMP_NAME, DHK_SCHEMA.ADD_BONUS(SALARY) AS WITH_BONUS
  FROM DHK_SCHEMA.EMPLOYEE;

Uma funรงรฃo de tabela รฉ definida com RETURNS TABLE e, em seguida, consultada na clรกusula FROM, o que a torna a maneira natural de construir um conjunto de dados parametrizado e reutilizรกvel que um vista de cรกlculo ou o relatรณrio pode consumir.

Melhores Prรกticas de Script SQL

O script SQL tem bom desempenho quando escrito para permitir que o mecanismo o paralelize e tem desempenho ruim quando escrito como cรณdigo de aplicativo. Seis hรกbitos fazem a diferenรงa.

  1. Prefira o discurso declarativo ao imperativo. Uma รบnica instruรงรฃo baseada em conjuntos supera um loop que processa linhas uma de cada vez, frequentemente por vรกrias ordens de magnitude. Recorra a um loop FOR somente quando a lรณgica realmente nรฃo puder ser expressa como uma operaรงรฃo de conjunto.
  2. Evite cursores. Eles forรงam o processamento linha por linha e anulam completamente o mecanismo de cรกlculo. Quase todos os cursores podem ser reescritos como uma junรงรฃo ou uma agregaรงรฃo.
  3. Mantenha as declaraรงรตes independentes. Duas variรกveis โ€‹โ€‹de tabela que nรฃo fazem referรชncia uma ร  outra sรฃo calculadas em paralelo. Encadear cada etapa na anterior serializa todo o procedimento.
  4. Declare READS SQL DATA onde verdadeiro. Isso indica que o procedimento nรฃo tem efeitos colaterais, o que permite uma maior otimizaรงรฃo.
  5. Filtre o mais cedo possรญvel. Reduzir o nรบmero de linhas na primeira variรกvel de tabela diminui o tamanho de tudo o que vem depois, enquanto filtrar no final jรก pagou o custo.
  6. Migrar para longe das funรงรตes CE_. Estรฃo obsoletos, nรฃo podem ser misturados livremente com SQL em uma mesma instruรงรฃo, e o otimizador de SQL agora lida melhor com a mesma tarefa.

A sintaxe em nรญvel de instruรงรฃo รฉ abordada em SAP SQL HANA, as funรงรตes disponรญveis dentro de um procedimento em SAP Funรงรตes SQL do HANAe os objetos de modelagem que consomem esses procedimentos no SAP Modelagem HANA tutorial.

Perguntas Frequentes

Os dois pontos indicam uma leitura da variรกvel. Escrevรช-la sem os dois pontos ร  esquerda atribui um valor a ela; portanto, as duas formas permitem que o analisador sintรกtico distinga atribuiรงรฃo de referรชncia.

Nรฃo. Os operadores de plano do mecanismo de cรกlculo estรฃo obsoletos. O cรณdigo existente continua funcionando, mas novos desenvolvimentos devem usar SQL padrรฃo, que o otimizador agora processa pelo menos tรฃo bem.

Muitas vezes sim. Muitos loops FOR e cursores expressam uma junรงรฃo ou agregaรงรฃo escrita de forma extensa, e a IA pode sugerir o equivalente baseado em conjuntos. Verifique se a contagem de linhas corresponde antes de adotรก-la.

Sim. Lendo o plano.Viz trace, a IA identifica a instruรงรฃo que estรก consumindo tempo e se as etapas foram serializadas por uma dependรชncia desnecessรกria entre variรกveis โ€‹โ€‹de tabela.

Sim, atravรฉs de vรกrios parรขmetros da tabela OUTPUT. Esta รฉ uma das principais vantagens do SQL Script em relaรงรฃo a um procedimento SQL simples, que sรณ pode retornar um รบnico resultado.

Resuma esta postagem com: