热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oracle命令窗口exec,Oracle如何直接运行OS命令(下)

正在看的ORACLE教程是:Oracle如何直接运行OS命令(下)。EXECSQLWHENEVERSQLERRORCONTINUE;sqlglm(msg_buff

正在看的ORACLE教程是:Oracle如何直接运行OS命令(下)。  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;  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的文档。

<



推荐阅读
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
author-avatar
风中冰雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有