9.OB4.0调用存储过程通过临时表返回多行记录

文章演示了如何在MySQL中创建存储过程返回多行数据,并通过示例展示了存储过程的实现。接着,解释了如何在帆软前端调用这个存储过程,特别提到了由于OceanBase(OB)对字符集的支持,需设置GBK以正确显示中文。最后,强调了在帆软展示OB数据时需注意字符集的设置。

--MYSQL存储过程返回多行。

1.表数据准备
 

drop table if exists t1;
drop table if exists t2;
drop table if exists t3;
create table t1(id varchar(20),data int )default charset gbk;
create table t2(id int) default charset gbk;
create table t3(id varchar(20),c int)default charset gbk;
insert into t1 values ('xsq',1),('xsq2',2),('xsq3',3),('薛双奇',4),('北京',5);
insert into t2 values (1),(2),(3),(4);

select * from t1;
select * from t2;
select * from t3;


2.创建存储过程。

drop PROCEDURE curdemo;


delimiter //
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM sjzt.t1;
DECLARE cur2 CURSOR FOR SELECT id FROM sjzt.t2;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
OPEN cur2;
truncate table sjzt.t3;
REPEAT FETCH cur1 INTO a, b;
FETCH cur2 INTO c;
IF NOT done THEN
IF b < c THEN
INSERT INTO sjzt.t3 VALUES (a,b);
ELSE
INSERT INTO sjzt.t3 VALUES (a,c);
END IF;
END IF;
UNTIL done
END REPEAT;
CLOSE cur1;
CLOSE cur2;
DROP TABLE IF EXISTS TEMP_T3;
CREATE TEMPORARY TABLE TEMP_T3(ID VARCHAR(20),C INT);
INSERT INTO TEMP_T3 SELECT * FROM T3;
SELECT * FROM TEMP_T3;
END;
//

3.调用存储过程。

call curdemo();

MySQL [sjzt]> call curdemo();
-> //
+-----------+------+
| ID | C |
+-----------+------+
| xsq | 1 |
| xsq2 | 2 |
| xsq3 | 3 |
| 薛双奇 | 4 |
+-----------+------+
4 rows in set (0.78 sec)

4.帆软前端调用存储过程。

(1)添加数据库模板

2)预览存储过程,会执行并输出存储过程。可以发现会返回多行。

 

3)创建数据库连接。

由于OB不支持UTF8字符集,支持GBK和UTF8MB4。而帆软支持GBK和UTF8,所以如果有中文,必须设置为GBK字符集才能正常显示。

 

数据库连接。连接OB就当做MySQL连接,只是连接时需要注意用户部分,

填写的是:用户名@租户名#集群名称。

数据库:MySQL 

驱动:com.mysql.jdbc.Driver 

主机:192.168.1.61 

端口:2883   --OBPROXY 代理服务端口是2883;

数据库:sjzt    --sjzt用户登录到sjzt数据库

用户:sjzt@tent_t1#hjzqobce        --hjzqobce集群下 tent_t1租户(实例)下 sjzt用户登录。

密码:sjzt    --数据中台用户的密码:sjzt 

编码:GBK   --字符集设置为GBK 

URL:jdbc:mysql://192.168.1.61:2883/sjzt 

hjzqobce:集群名称。

tent_t1:租户名称

连接串解释:

hjzqobce集群下 tent_t1租户里面 sjzt用户通过2883端口登录到sjzt 数据库,登录密码是:sjzt 

mysql -h192.168.1.61 -usjzt@tent_t1#hjzqobce -P2883 -p'sjzt' -c -A sjzt

[admin@obcontrol ~]$ mysql -h192.168.1.61 -usjzt@tent_t1#hjzqobce -P2883 -p'sjzt' -c -A sjzt
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.6.25 OceanBase_CE 4.0.0.0 (r103000022023011215-05bbad0279302d7274e1b5ab79323a2c915c1981) (Built Jan 12 2023 15:28:27)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [sjzt]>
MySQL [sjzt]>
MySQL [sjzt]> show tables;
+----------------+
| Tables_in_sjzt |
+----------------+
| emp |
| myt1 |
| myt2 |
| t1 |
| t2 |
| t2_m_rcr |
| t3 |
| t_m_rclc |
| t_m_rcrc |
| tbl1 |
| tbl1_h |
| tbl1_k |
| tbl1_l |
| tbl1_lc |
| tbl1_log_rc |
| tbl1_r |
| tbl2 |
| tbl3 |
| tbl4 |
| tbl5 |
| tbl6 |
| tbl7 |
| tbl_rr |
| test |
| test1 |
| test2 |
| test3 |
| test4 |
| ttgh |
| ttgh2 |
| v_emp |
+----------------+
31 rows in set (0.01 sec)

 5.总结

如果使用帆软展示OB4.0.的数据,且要执行存储过程,则需要将OB的表设置为GBK字符集,否则中文乱码。

OB存储过程支持游标,临时表,返回多行数据。

在使用虚拟机安装Oracle Database 18c (简称OB4.0)并配置`database.yml`文件时,通常需要按照以下步骤操作: 1. **下载安装包**:首先从Oracle官网下载适合你虚拟机操作系统的Oracle Database 18c的安装介质。 2. **启动安装**:登录到虚拟机,使用命令行工具(如SSH)解压安装文件,并运行`response脚本`开始安装过程,例如: ``` $ sudo bash ./runInstaller -silent -waitforcompletion -ignorePrereq -l /path/to/install/response_file response_file.ora ``` 这里`response_file.ora`是预先创建好的响应文件,用于指定安装选项。 3. **安装完成后**,安装目录下会生成`ORACLE_HOME`,其中包含`config络件`目录,你需要在此目录下找到`database`子目录,然后复制`database.sample.yml`到`database.yml`,这是默认的配置模板。 4. **编辑`database.yml`**:使用文本编辑器打开`database.yml`,修改数据库相关的设置,比如监听地址、服务名、口令等。注意安全,避免直接在命令行中显示敏感信息。 5. **启动数据库**:使用`Grid Control`或`SQL*Plus`等工具启动数据库,根据配置加载`database.yml`的内容。 6. **验证连接**:尝试通过`sqlplus`或其他客户端工具连接到新安装的数据库,检查是否能成功。 由于这是一个相对复杂的操作,具体的命令可能会因为环境差异而略有不同。如果你遇到了特定的问题,可以提供更多的上下文以便得到更准确的帮助。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值