Estou tentando enviar dados de um banco de dados autônomo no OCI por meio desta função para um log criado no console do OCI:
DECLARE
log_endpoint VARCHAR2(4000);
log_body CLOB;
CURSOR audit_cursor IS
SELECT EVENT_TIMESTAMP, DBUSERNAME, ACTION_NAME, RETURN_CODE
FROM UNIFIED_AUDIT_TRAIL
WHERE EVENT_TIMESTAMP > SYSTIMESTAMP - INTERVAL '1' DAY;
BEGIN
log_endpoint := 'https://logging.eu-frankfurt-1.oci.oraclecloud.com/20200531/logs/ocid1.log.oc1.eu-frankfurt-1.mysecretocid';
FOR rec IN audit_cursor LOOP
log_body := '{
"specversion": "1.0",
"source": "autonomous-database",
"eventType": "db-audit-log",
"data": {
"timestamp": "' || TO_CHAR(rec.EVENT_TIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS"Z"') || '",
"dbusername": "' || rec.DBUSERNAME || '",
"action": "' || rec.ACTION_NAME || '",
"status": "' || CASE WHEN rec.RETURN_CODE = 0 THEN 'SUCCESS' ELSE 'FAILURE' END || '"
}
}';
DBMS_CLOUD.SEND_REQUEST(
credential_name => 'MY_CRED',
uri => log_endpoint,
method => DBMS_CLOUD.METHOD_POST,
body => log_body
);
END LOOP;
END;
/
A credencial para esta função já foi criada.
Quando executo esta função estou obtendo
ERROR at line 29:
ORA-06550: line 29, column 5:
PLS-00306: wrong number or types of arguments in call to 'SEND_REQUEST'
ORA-06550: line 29, column 5:
PL/SQL: Statement ignored
Pela documentação da Oracle, tudo parece bem com a definição DBMS_CLOUD.SEND_REQUEST.
Alguma sugestão aqui?
O SEND_REQUEST espera corpo como BLOB. Não como CLOB.
Experimente isto:
Verifique também a estrutura dos parâmetros SEND_REQUEST na documentação DBMS_CLOUD.SEND_REQUEST da Oracle.