Recentemente a Oracle liberou a versão 21c do seu banco. Com essa nova versã, os desenvolvedores agora podem executar trechos de código JavaScript dentro do banco de dados. Isso permite que sejam executadas pequenas tarefas computacionais facilmente expressas em JavaScript, sem ter que mover os dados para uma camada intermediária ou navegador.
Como funciona?
O Multilingual Engine (MLE) no Oracle Database 21c, desenvolvido por GraalVM, mapeia automaticamente os tipos de dados JavaScript para os tipos de dados Oracle Database e vice-versa, para que os desenvolvedores não tenham que lidar com a conversão de tipo de dados eles próprios. Além disso, o próprio código JavaScript pode executar PL / SQL e SQL por meio de um módulo JavaScript integrado.
Tudo isso também permite que os desenvolvedores que utilizam a plataforma APEX (Oracle Application Express) usem JavaScript como uma linguagem de primeira classe em seus aplicativos APEX, sem ter que sacrificar o poder do PL / SQL e do SQL. Aqui está um exemplo de código que usa o pacote DBMS_MLE PL / SQL para executar o código JavaScript:
set serveroutput on; DECLARE ctx dbms_mle.context_handle_t; source CLOB; greeting VARCHAR2(100); BEGIN ctx := dbms_mle.create_context(); -- Cria um contexto para execução usando o MLE dbms_mle.export_to_mle(ctx, 'person', 'World'); -- Exporta os valores do PL/SQL source := q'~ var bindings = require("mle-js-bindings"); var person = bindings.importValue("person"); // Importa os valores exportados anteriormente var greeting = "Hello, " + person + "!"; bindings.exportValue("greeting", greeting); // Exporta os valores para o PL ~'; dbms_mle.eval(ctx, 'JAVASCRIPT', source); -- Avalia e executa o código dentro do contexto dbms_mle.import_from_mle(ctx, 'greeting', greeting); -- Importa os valores exportados pelo MLE dbms_output.put_line('Greetings from MLE: ' || greeting); dbms_mle.drop_context(ctx); END;
Como você pode ver, o JavaScript pode ser usado como algumas linguagens de script já funcionam quando são invocadas dentro de outras.
Para aqueles que usam APEX
Agora se você estiver utilizando o APEX com o banco 21c, você poderá executar o código de forma bem mais simples e sem utilizar uma linha de PL. Basta mudar a configuração e executar seu código
// getting page item values const empno = apex.env.P1_ID; const salary = apex.env.P1_SAL; // executing DML operations apex.conn.execute('update emp set sal = :sal where empno = :empno', { sal: salary, empno: empno }); // executing PL/SQL apex.conn.execute('begin apex_debug.message(:1); end;', ['Updated salary for ' + empno]); // messages passed to console.log will also end up in the debug logs console.log('Updated salary for ' + empno, ' using console.log for printing'); // setting page item values apex.env.P1_STATUS = 'Success!';
Como mostra este exemplo, você pode interagir com os itens da página via apex.env e executar DML ou PL / SQL via apex.conn.execute
A documentação formal da API dessas novas APIs ainda está por vir. No entanto, eles são um subconjunto do Driver Oracle Node.js, embora com diferenças notáveis, como a mudança de funções assíncronas para síncronas. Você também pode encontrar exemplos no texto de ajuda do respectivo atributo e navegando no preenchimento automático do editor de código.