sql >> データベース >  >> RDS >> Oracle

Oracle®のSQLServerストアドプロシージャ

    SQL Serverで、サンプルテーブルを作成してデータを入力します。

    CREATE TABLE EMP (
       EMPNO    FLOAT(4) NOT NULL PRIMARY KEY,
       ENAME    VARCHAR(10),
       JOB      VARCHAR(9),
       MGR      FLOAT(4),
       HIREDATE DATE,
       SAL      NUMERIC(7,2),
       COMM     NUMERIC(7,2),
       DEPTNO   NUMERIC(2));
    
    INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902, '12-17-1980', 800, NULL, 20)
    INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '02-20-1981', 1600, 300, 30)
    INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698, '02-01-1981', 1250, 500, 30)
    INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER', 7839, '04-02-1981', 2975, NULL, 20)
    INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '09-28-1981', 1250, 1400, 30)
    INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839, '05-01-1981', 2850, NULL, 30)
    INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839, '06-09-1981', 2450, NULL, 10)
    INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566, '12-09-1982', 3000, NULL, 20)
    INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL, '11-17-1981', 5000, NULL, 10)
    INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698, '09-08-1981', 1500, 0, 30)
    INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788, '01-12-1983', 1100, NULL, 20)
    INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698, '12-03-1981', 950, NULL, 30)
    INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566, '12-03-1981', 3000, NULL, 20)
    INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782, '01-23-1982', 1300, NULL, 10)
    

    このテーブルからデータを返すストアドプロシージャを作成します。このプロシージャをOracle®から呼び出します。

    CREATE PROCEDURE ReturnEmployees AS
    BEGIN
      SELECT * FROM EMP
    END
    

    SQL*Plus内 、次のDBMS_HS_PASSTHROUGHを使用します ストアドプロシージャを実行し、結果を表示する関数。この例では、sqlserverlink は、DG4ODBCとEasysoftのSQLServerODBCドライバーを使用してSQLServerに接続するデータベースリンクの名前です。

    $ ./sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.2.0 Production on Fri Oct 14 10:03:53 2016
    
    Copyright (c) 1982, 2011, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
    
    SQL> set echo on;
    set serveroutput on;
    DECLARE
     c INTEGER;
     R1 INTEGER;
     SOUT varchar2(100);
     C1 INTEGER;
    BEGIN
     c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@sqlserverlink;
     DBMS_HS_PASSTHROUGH.PARSE@sqlserverlink(c,'exec ReturnEmployees');
     LOOP
      R1 := DBMS_HS_PASSTHROUGH.FETCH_ROW@sqlserverlink (c);
      EXIT WHEN R1 = 0;
      DBMS_HS_PASSTHROUGH.GET_VALUE@sqlserverlink (c, 1, SOUT);
      DBMS_OUTPUT.PUT_LINE(SOUT);
     END LOOP;
     DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@sqlserverlink(c);
    EXCEPTION
     WHEN NO_DATA_FOUND
     THEN DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@sqlserverlink(c);
    END;
    /
    SQL>
    7369
    7499
    7521
    7566
    7654
    7698
    7782
    7788
    7839
    7844
    7876
    7900
    7902
    7934
    
    PL/SQL procedure successfully completed.
    
    SQL>
    
    

    1. Oracle SQL Developerでクエリ結果をExcelにエクスポートする方法は?

    2. テーブルに影響を与えたSQLをログに記録するトリガーを作成しますか?

    3. Pythondatetime.datetimeオブジェクトをMySQLに挿入する

    4. .NETのイベントとスレッド