Oracle如何直接运行OS命令(下)

生死淡不服干4

生死淡不服干4

2016-02-19 12:02

下面这个Oracle如何直接运行OS命令(下)教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!
正在看的ORACLE教程是:Oracle如何直接运行OS命令(下)。  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");

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  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] = '';
  /*如果是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] = '';
  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;

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预编译: 

  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的文档。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
<

展开更多 50%)
分享

猜你喜欢

Oracle如何直接运行OS命令(下)

编程语言 网络编程
Oracle如何直接运行OS命令(下)

Oracle中如何直接运行OS命令(下)

电脑网络
Oracle中如何直接运行OS命令(下)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Oracle如何直接运行OS命令(上)

编程语言 网络编程
Oracle如何直接运行OS命令(上)

Oracle中如何直接运行OS命令(上)

电脑网络
Oracle中如何直接运行OS命令(上)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何实现禁止USB接口直接运行

电脑入门
如何实现禁止USB接口直接运行

如何直接在浏览器内运行SQL命令

Java JAVA基础
如何直接在浏览器内运行SQL命令

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

退却了浮华笑颜亦如花 - QQ情侣分组

退却了浮华笑颜亦如花 - QQ情侣分组

图片自动更新(说明)

图片自动更新(说明)
下拉加载更多内容 ↓