CREATE OR REPLACE PROCEDURE CALCULATION(TABLES_NAME IN VARCHAR,
  MIN_SUPPORT IN NUMBER, 
  RTN_ID OUT NUMBER,
  RTN_STR OUT VARCHAR2) 像上面的这个存储过程用dos怎么调用?急,没有时间研究了,要能运行的代码。结果输出到txt,还需要dos调用这个txt的语句

解决方案 »

  1.   

    你不连Oracle怎么去执行procedure啊,问都没问对,首先dos下登录Oracle,即用sqlplus连接Oracle后,然后用spool命令来讲你过程的结果输入到txt文件
      

  2.   

    楼上说的对,需要连接到数据库才能执行SQL,DOS是不懂的SQL的。如果你想在DOS下直接执行,那么写成批处理文件尝试以下吧
      

  3.   

    sqlplus SYSMAN/ORACLE@ORACLE as sysdba @test.sql
    已经连上了。
      

  4.   

    1、建立一个SQL文件,如call.sql,内容如下:
    set linesize 120
    set termout off
    set pagesize 500
    set trimspool on
    set serveroutput on
    set feedback offspool d:\result.txtDECLARE
      v_TABLES_NAME VARCHAR2(30); --声明一个变量,作为入参
      v_MIN_SUPPORT NUMBER; --声明一个变量,作为入参
      v_RTN_ID      NUMBER; --声明一个变量,作为保存结果
      v_RTN_STR     VARCHAR2(50); --声明一个变量,作为保存结果
    BEGIN
      v_TABLES_NAME := 'emp'; --根据你的需要赋一个表名
      v_MIN_SUPPORT NUMBER := 20; --不知道是什么意思,随便赋一值
      --调用存储过程
      CALCULATION(v_TABLES_NAME, v_MIN_SUPPORT, v_RTN_ID, v_RTN_STR);
      --取得输出结果变量v_RTN_ID,v_RTN_STR按你的要求处理
      --将输出变量打印到屏幕上,由spool存储到result.txt文件中
      dbms_output.put_line('RTN_ID='||RTN_ID||','||'RTN_STR='||RTN_STR);
    END;
    /spool off;
    exit;2、然后建立一个批处理命令文件,call.bat(与call.sql放在同一地方),内容如下(其中用户名、密码、
    连接串根据你存储过程所在用户):
    sqlplus 用户名/密码@连接串 @call.sql3、在命令行下执行批处理
    C:\>call.bat
      

  5.   

     按照5楼的代码运行,有错误提示:
     --调用存储过程
      *
    第 9 行出现错误:
    ORA-06550: 第 8 行, 第 17 列:
    PLS-00103: 出现符号 "NUMBER"在需要下列之一时:
    := . ( @ %
    ;
    符号 "." 被替换为 "NUMBER" 后继续。修改了一下你给的代码,呵呵,我不太会改,改下来还是运行不了。set linesize 120
    set termout off
    set pagesize 500
    set trimspool on
    set serveroutput on
    set feedback offspool result.txtDECLARE
      v_TABLES_NAME VARCHAR2(30); --声明一个变量,作为入参
      v_MIN_SUPPORT NUMBER; --声明一个变量,作为入参
      v_RTN_ID NUMBER; --声明一个变量,作为保存结果
      v_RTN_STR VARCHAR2(50); --声明一个变量,作为保存结果
    BEGIN
      v_TABLES_NAME := 'ANALYSIS_DATE'; 
      v_MIN_SUPPORT := 100; --修改
      CALCULATION(v_TABLES_NAME, v_MIN_SUPPORT, v_RTN_ID, v_RTN_STR);
     
      --将输出变量打印到屏幕上,由spool存储到result.txt文件中
      dbms_output.put_line('RTN_ID='||v_RTN_ID||','||'RTN_STR='||v_RTN_STR);--修改
    END;
    /spool off;
    exit;
    还是有错误提示:
      CALCULATION(v_TABLES_NAME, v_MIN_SUPPORT, v_RTN_ID, v_RTN_STR);
      *
    第 9 行出现错误:
    ORA-06550: 第 9 行, 第 3 列:
    PLS-00201: 必须声明标识符 'CALCULATION'
    ORA-06550: 第 9 行, 第 3 列:
    PL/SQL: Statement ignored
      

  6.   

    set linesize 120
    set termout off
    set pagesize 500
    set trimspool on
    set serveroutput on
    set feedback off
    spool result.txtDECLARE
      v_TABLES_NAME VARCHAR2(30); --声明一个变量,作为入参
      v_MIN_SUPPORT NUMBER; --声明一个变量,作为入参
      v_RTN_ID NUMBER; --声明一个变量,作为保存结果
      v_RTN_STR VARCHAR2(50); --声明一个变量,作为保存结果
    BEGIN
      v_TABLES_NAME := 'emp'; --根据你的需要赋一个表名
      v_MIN_SUPPORT := 20; --不知道是什么意思,随便赋一值
      --调用存储过程
      calculation(tables_name => v_TABLES_NAME,
                  min_support => v_MIN_SUPPORT ,
                  rtn_id => v_RTN_ID,
                  rtn_str => v_RTN_STR);
      --取得输出结果变量v_RTN_ID,v_RTN_STR按你的要求处理
      --将输出变量打印到屏幕上,由spool存储到result.txt文件中
      dbms_output.put_line('RTN_ID='||v_RTN_ID||','||'RTN_STR='||v_RTN_STR);
    END;
    /spool off;
    exit;
    改成这样调用 
      

  7.   

    CALCULATION(v_TABLES_NAME, v_MIN_SUPPORT, v_RTN_ID, v_RTN_STR);
    这种方法也行,但是方法名写成小写的。