Oracle
 sql >> Base de données >  >> RDS >> Oracle

Exécuter la procédure stockée SQL Server via un lien de base de données à partir d'Oracle

Il est en fait possible d'appeler des procédures stockées ou des fonctions via dg4odbc. J'ai testé Database Gateway pour MS SQL Server , et il n'a pas réussi à prendre en charge nativement les fonctions de table/scalaire de Sql Server. Les deux doivent s'appuyer sur DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE pour cette fonctionnalité. Nous devions récupérer l'id des lignes insérées :

DECLARE
  RESULT NUMBER(8,2);
  val  INTEGER;
  c    INTEGER;
  nr   INTEGER;
BEGIN

  RESULT := DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@mssqldb('select SCOPE_IDENTITY();');
  c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@mssqldb; 
  DBMS_HS_PASSTHROUGH.PARSE@mssqldb(c, 'select @@IDENTITY');
  LOOP
    nr := DBMS_HS_PASSTHROUGH.FETCH_ROW@mssqldb(c);
    EXIT WHEN nr = 0;
    DBMS_HS_PASSTHROUGH.GET_VALUE@mssqldb(c, 1, val);
  END LOOP;  
  DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@mssqldb(c); 
  DBMS_OUTPUT.PUT_LINE('retrieved: ' || val);
END;