日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle中若何间接运转OS敕令(下)

發(fā)布時(shí)間:2025/7/14 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle中若何间接运转OS敕令(下) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??泉源:網(wǎng)海拾貝?





  EXEC SQL WHENEVER SQLERROR CONTINUE;
  sqlglm(msg_buffer, &buffer_size, &msg_length);
  printf("Daemon error while connecting:n");
  printf("%.*sn", 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("%.*sn", 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發(fā)來的字符*/?
  :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] = '';
  /*要是是stop,該進(jìn)程就加入*/?
  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] = '';
  printf("Will execute system command '%s'n", value.arr);
  /*運(yùn)轉(zhuǎn)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: %dn", status);
  }?
  }?
  ELSE?
  {?
  printf?
  ("Daemon error: invalid command '%s' received.n",? command.arr);
  }?
  }?
  ELSE?
  {?
  printf("Daemon error while waiting for signal.");
  printf(" status = %dn", status);
  }?
  }?
  EXEC SQL COMMIT WORK RELEASE;
  exit(0);
  }?


  以上代碼起名為daemon.pc,用proc預(yù)編譯:?

  proc iname=daemon.pc userid=用戶名/暗碼@供職名 sqlcheck=semantics?

  失蹤失蹤daemon.c,在用c終止編譯,留意在NT上要把orasql8.lib加上,否則編譯經(jīng)過進(jìn)程,銜接沒法經(jīng)過進(jìn)程。?

  3、在供職器上運(yùn)轉(zhuǎn)daemon.exe?

  4、在sqlplus運(yùn)轉(zhuǎn)測試語句:?

  SQL> variable rv number?
  SQL> execute :rv := DAEMON.EXECUTE_SYSTEM('ls -la');
  PL/SQL 進(jìn)程已告成完成。?
  SQL> execute :rv := DAEMON.EXECUTE_SYSTEM('dir');
  PL/SQL 進(jìn)程已告成完成。?
  SQL>?

  DBMS_PIPE的用法見oracle的文檔。





版權(quán)聲明: 原創(chuàng)作品,答應(yīng)轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接體式格局標(biāo)明文章 原始情由 、作者信息和本聲明。否則將清查功令責(zé)任。

轉(zhuǎn)載于:https://www.cnblogs.com/zgqjymx/archive/2011/03/07/1975888.html

總結(jié)

以上是生活随笔為你收集整理的Oracle中若何间接运转OS敕令(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。