• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Oracle中如何直接運行OS命令(下)

    發表于:2007-07-13來源:作者:點擊數: 標簽:
    EXEC SQL WHENEVER SQLERROR CONTINUE; sqlglm(msg_buffer, buffer_size, msg_length); printf("Daemon error while connecting:\n"); printf("%.*s\n", msg_length, msg_buffer); printf("Daemon quitting.\n"); exit(1); } void sql_e
      EXEC SQL WHENEVER SQLERROR CONTINUE;
      sqlglm(msg_buffer, &buffer_size, &msg_length);
      printf("Daemon error while connecting:\n");
      printf("%.*s\n", msg_length, msg_buffer);
      printf("Daemon quitting.\n");
      exit(1);
      } 

      void 
      sql_error() 
      { 
      char msg_buffer[512];
      int msg_length;
      int buffer_size = 512;

      EXEC SQL WHENEVER SQLERROR CONTINUE;
      sqlglm(msg_buffer, &buffer_size, &msg_length);
      printf("Daemon error while executing:\n");
      printf("%.*s\n", msg_length, msg_buffer);
      printf("Daemon continuing.\n");
      } 
      main() 
      { 
      EXEC SQL WHENEVER SQLERROR DO connect_error();
      EXEC SQL CONNECT :uid;
      printf("Daemon connected.\n");

      EXEC SQL WHENEVER SQLERROR DO sql_error();
      printf("Daemon waiting...\n");
      while (1) { 
      EXEC SQL EXECUTE 
      BEGIN 
      /*接收deamon發來的字符*/ 
      :status := DBMS_PIPE.RECEIVE_MESSAGE('daemon');
      IF :status = 0 THEN 
      /*取出字符*/ 
      DBMS_PIPE.UNPACK_MESSAGE(:command);
      END IF;
      END;
      END-EXEC;
      IF (status == 0) 
      { 
      command.arr[command.len] = '\0';
      /*如果是stop,該進程就退出*/ 
      IF (!strcmp((char *) command.arr, "STOP")) 
      { 
      printf("Daemon exiting.\n");
      break;
      } 

      ELSE IF (!strcmp((char *) command.arr, "SYSTEM")) 
      { 
      EXEC SQL EXECUTE 
      BEGIN 
      DBMS_PIPE.UNPACK_MESSAGE(:return_name);
      DBMS_PIPE.UNPACK_MESSAGE(:value);
      END;
      END-EXEC;
      value.arr[value.len] = '\0';
      printf("Will execute system command '%s'\n", value.arr);
      /*運行os命令*/ 
      status = system(value.arr);
      EXEC SQL EXECUTE 
      BEGIN 
      DBMS_PIPE.PACK_MESSAGE('done');
      DBMS_PIPE.PACK_MESSAGE(:status);
      :status := DBMS_PIPE.SEND_MESSAGE(:return_name);
      END;
      END-EXEC;

    [page]
      IF (status) 
      { 
      printf 
     ?。?Daemon error while responding to system command.");
      printf(" status: %d\n", status);
      } 
      } 
      ELSE 
      { 
      printf 
     ?。?Daemon error: invalid command '%s' received.\n",  command.arr);
      } 
      } 
      ELSE 
      { 
      printf("Daemon error while waiting for signal.");
      printf(" status = %d\n", status);
      } 
      } 
      EXEC SQL COMMIT WORK RELEASE;
      exit(0);
      } 

      以上代碼起名為daemon.pc,用proc預編譯: 

      proc iname=daemon.pc userid=用戶名/密碼@服務名 sqlcheck=semantics 

      得到daemon.c,在用c進行編譯,注意在NT上要把orasql8.lib加上,否則編譯通過,連接沒法通過。 

      3、在服務器上運行daemon.exe 

      4、在sqlplus運行測試語句: 

      SQL> variable rv number 
      SQL> execute :rv := DAEMON.EXECUTE_SYSTEM('ls -la');
      PL/SQL 過程已成功完成。 
      SQL> execute :rv := DAEMON.EXECUTE_SYSTEM('dir');
      PL/SQL 過程已成功完成。 
      SQL> 

      DBMS_PIPE的用法見oracle的文檔。

      

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>