首页
关于
友链
推荐
肥啾解析
百度一下
肥啾GPT
Search
1
宝塔面板登录 phpMyAdmin 提示服务器和客户端上指示的HTTPS之间不匹配
323 阅读
2
Customer complaints evolve with in-car tech
226 阅读
3
JavaScript解析
187 阅读
4
所谓关系
151 阅读
5
人类果然都是好争斗的
128 阅读
默认分类
网游架设
手机游戏
python
PHP
Mysql
VBA
C++
JAVASCRIPT
javascript基础
Oracle
生产管理
计划控制
ERP系统开发
APS排产
MES研究
考勤系统
CPA
财管
实务
经济法
战略
审计
税法
藏书架
古典名著
世界名著
编程秘籍
攻防渗透
经管书籍
大佬传经
风雅读物
考试相关
心情格言
拾玉良言
外文报刊
外刊随选
Facebook
Twitter
China Daily
软考
登录
Search
标签搜索
期刊读物
古文
何瑜明
累计撰写
182
篇文章
累计收到
154
条评论
首页
栏目
默认分类
网游架设
手机游戏
python
PHP
Mysql
VBA
C++
JAVASCRIPT
javascript基础
Oracle
生产管理
计划控制
ERP系统开发
APS排产
MES研究
考勤系统
CPA
财管
实务
经济法
战略
审计
税法
藏书架
古典名著
世界名著
编程秘籍
攻防渗透
经管书籍
大佬传经
风雅读物
考试相关
心情格言
拾玉良言
外文报刊
外刊随选
Facebook
Twitter
China Daily
软考
页面
关于
友链
推荐
肥啾解析
百度一下
肥啾GPT
搜索到
182
篇与
的结果
2025-07-25
Oracle导出数据库
🔧 一、操作流程(11.2.0.1.0 适配)创建逻辑目录sqlCopy Code-- 物理路径需提前创建(如 D:\oracle_backup)CREATE OR REPLACE DIRECTORY expnc_dir AS 'D:\oracle_backup';GRANT READ, WRITE ON DIRECTORY expnc_dir TO 目标用户(如 system); ⚠️ 物理目录必须真实存在,否则报错 ORA-390023。全库导出命令bashCopy Codeexpdp system/密码@SERVICE_NAME DIRECTORY=expnc_dir DUMPFILE=full_11g.dmp LOGFILE=expdp_11g.log FULL=Y COMPRESSION=ALL关键参数说明:FULL=Y:导出全库数据COMPRESSION=ALL:压缩减少文件体积1VERSION=10.2.0(可选):需兼容低版本时添加(如迁移到 10g)4按用户导出bashCopy Codeexpdp system/密码@SERVICE_NAME SCHEMAS=scott,hr DUMPFILE=user_schemas.dmp DIRECTORY=expnc_dir⚠️ 二、版本注意事项字符集强制检查导出前需验证字符集一致性:sqlCopy CodeSELECT USERENV('LANGUAGE') FROM DUAL; -- 结果需与目标库一致不一致会导致导入乱码或失败3。跨版本兼容性导出高版本(11g)导入低版本(如 10g)时:必须添加 VERSION=10.2.0,否则目标库无法识别元数据4。同版本或向高版本迁移则无需指定。Windows 路径格式目录路径需用双反斜杠或正斜杠:sqlCopy CodeCREATE DIRECTORY win_dir AS 'C:\oracle_backup'; -- 或 'C:/oracle_backup'2💡 三、常见问题解决报错 ORA-39070: 无法打开日志文件检查目录权限:sqlCopy CodeGRANT READ, WRITE ON DIRECTORY expnc_dir TO EXPORT_USER; -- 重新授权3导出文件过大启用多文件分割:bashCopy CodeDUMPFILE=exp_%U.dmp FILESIZE=2G -- 分割为 2GB/文件1仅导出元数据(表结构)bashCopy CodeCONTENT=METADATA_ONLY -- 不包含实际数据1📌 总结建议场景 关键参数全库备份 FULL=Y + COMPRESSION=ALL向低版本迁移(如 10g) 必加 VERSION=10.2.0仅备份表结构 CONTENT=METADATA_ONLY大库分割存储 DUMPFILE=exp_%U.dmp FILESIZE=2G备份完成后,使用 impdp 导入时需确保目标库已创建同名目录对象及表空间
2025年07月25日
11 阅读
0 评论
0 点赞
2025-07-25
Oracle命令
从命令行成功连接数据库,但 Navicat 连接失败,通常由以下原因导致。请按顺序排查:1. 监听器配置问题(最常见)检查监听器状态:lsnrctl status确认输出中是否包含您连接的服务名(如 orcl 或 PLM_TEST)。若无相关服务,需重新配置监听。手动注册服务(在 SQL*Plus 中执行):ALTER SYSTEM REGISTER;2. 连接类型不匹配Navicat 需使用完整连接信息:主机/IP: 数据库服务器地址(非localhost时需填真实IP) 端口: 1521(默认) 服务名/SID: orcl(根据实际填写) 示意图:Navicat 连接配置界面3. 防火墙或网络限制测试端口连通性(在客户端执行):telnet 数据库IP 1521 # Windows需启用Telnet客户端若无法连通,需在服务器开放端口:# Linux sudo firewall-cmd --add-port=1521/tcp --permanent sudo firewall-cmd --reload # Windows New-NetFirewallRule -DisplayName "Oracle" -Direction Inbound -Protocol TCP -LocalPort 1521 -Action Allow4. 客户端配置缺失配置 TNSNAMES.ORA(路径:%ORACLE_HOME%\network\admin\tnsnames.ora):PLM_TEST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 服务器IP)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) # 替换为实际服务名 ) )在 Navicat 中选择 "TNS" 连接方式,输入别名 PLM_TEST5. 版本兼容性问题Oracle 11g 需在 Navicat 中启用 旧版认证:Navicat 连接设置 → 高级 → 勾选 "Enable Oracle 10g R2 Authentication"6. 权限问题确保连接用户有远程登录权限:GRANT CREATE SESSION TO PLM_TEST;快速诊断脚本在数据库服务器执行:# 检查监听日志 tail -f $ORACLE_HOME/network/log/listener.log # 捕获连接过程 lsnrctl set trc_level 16排查流程图graph TD A[Navicat连接失败] --> B{监听器状态?} B -->|未运行| C[启动监听: lsnrctl start] B -->|无服务| D[ALTER SYSTEM REGISTER] B -->|正常| E{端口可访问?} E -->|否| F[开放防火墙1521端口] E -->|是| G{Navicat配置正确?} G -->|主机/IP错误| H[使用服务器真实IP] G -->|服务名错误| I[确认服务名: SELECT name FROM v$services] G -->|协议错误| J[启用Oracle 10g R2认证]📌 关键提示: 若问题仍在,请提供以下信息进一步分析:lsnrctl status 完整输出Navicat 报错截图(如 ORA-12154/ORA-12514)服务器操作系统类型数据库是否容器数据库(CDB)C:\Users\Ericming>lsnrctl startLSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 24-JUL-2025 14:29:20Copyright (c) 1991, 2010, Oracle. All rights reserved.TNS-01106: Listener using listener name LISTENER has already been startedC:\Users\Ericming>lsnrctl statuLSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 24-JUL-2025 14:32:21Copyright (c) 1991, 2010, Oracle. All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))STATUS of the LISTENERAlias LISTENERVersion TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - ProductionStart Date 23-JUL-2025 18:29:23Uptime 0 days 20 hr. 2 min. 58 secTrace Level offSecurity ON: Local OS AuthenticationSNMP OFFListener Parameter File C:\app\Ericming\product\11.2.0\dbhome_1\network\admin\listener.oraListener Log File c:\app\ericming\diag\tnslsnr\DESKTOP-KHT1N48\listener\alert\log.xmlListening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.\pipe\EXTPROC1521ipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DESKTOP-KHT1N48)(PORT=1521)))Services Summary...Service "CLRExtProc" has 1 instance(s). Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...Service "orcl.lan" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service...Service "orclXDB.lan" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service...The command completed successfullyC:\Users\Ericming>lsnrctl startLSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 24-JUL-2025 14:29:20Copyright (c) 1991, 2010, Oracle. All rights reserved.TNS-01106: Listener using listener name LISTENER has already been startedC:\Users\Ericming>lsnrctl statuLSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 24-JUL-2025 14:32:21Copyright (c) 1991, 2010, Oracle. All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))STATUS of the LISTENERAlias LISTENERVersion TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - ProductionStart Date 23-JUL-2025 18:29:23Uptime 0 days 20 hr. 2 min. 58 secTrace Level offSecurity ON: Local OS AuthenticationSNMP OFFListener Parameter File C:\app\Ericming\product\11.2.0\dbhome_1\network\admin\listener.oraListener Log File c:\app\ericming\diag\tnslsnr\DESKTOP-KHT1N48\listener\alert\log.xmlListening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.\pipe\EXTPROC1521ipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DESKTOP-KHT1N48)(PORT=1521)))Services Summary...Service "CLRExtProc" has 1 instance(s). Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...Service "orcl.lan" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service...Service "orclXDB.lan" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service...The command completed successfully构建联查语句UPDATE "PLM_TEST1"."SA_USER" SET "DEFAULTGROUPGUID"='F026619914C946F398652C5EAC9F19D2' WHERE "USERID"='heyuming'; COMMIT; UPDATE "PLM_TEST1"."SA_USER" SET "DEFAULTROLEGUID"='831BA48E898A4C56847CAA34467E1489' WHERE "USERID"='heyuming'; COMMIT; UPDATE "PLM_TEST1"."SA_USER" SET "CREATEUSERGUID"='ADAA20C87CAB450ABAC48DBBD00D863A' WHERE "USERID"='heyuming'; COMMIT; ADAA20C87CAB450ABAC48DBBD00D863A FBB1495693AE4DB4B08346BE47C06D0B 9BCFDFAE839D4979B2D9E75B40F1EB4C A4E1F9DC98A54D2D9F2D34F2EA2BC341 UPDATE "PLM_TEST1"."SA_GROUPROLE_USER" SET "ROLEGROUPGUID"='A4E1F9DC98A54D2D9F2D34F2EA2BC341' WHERE "USERGUID"='C25CD3712CEF4DBE96510179D1CEE2A7'; select GUID,MD_ID FROM BOMVIEW_0 where MD_ID='CN230XDT0001'; 1 SELECT GUID, MD_ID FROM BOMVIEW_0 WHERE MD_ID = 'CN230XDT0001'; 2 SELECT VIEWFK, END2$MASTER FROM BOMSTRUCTURE_0 WHERE VIEWFK IN (上一步查询得到的GUID值); 或者 SELECT VIEWFK, END2$MASTER FROM BOMSTRUCTURE_0 WHERE VIEWFK IN ( SELECT GUID -- 仅返回单列 FROM BOMVIEW_0 WHERE MD_ID = 'CN230XDT0001' ) 3 SELECT MD_NAME, MD_ID FROM ITEM_0 WHERE GUID IN (上一步查询得到的END2$MASTER值); 或者 SELECT MD_NAME, MD_ID FROM ITEM_0 WHERE MASTERFK IN (SELECT END2$MASTER FROM BOMSTRUCTURE_0 WHERE VIEWFK IN ( SELECT GUID -- 仅返回单列 FROM BOMVIEW_0 WHERE MD_ID = 'CN230XDT0001' ) );
2025年07月25日
18 阅读
0 评论
0 点赞
2025-07-24
php操作Oracle数据库示例
下面是一个完整的 PHP 操作 Oracle 数据库命令指南,涵盖了从连接到基本操作的实用代码示例:1. 连接数据库<?php // 配置连接信息 $db_host = "localhost"; $db_port = "1521"; $db_service = "ORCL"; // 服务名 $db_user = "PLM_TEST"; $db_pass = "your_password"; // 实际密码 // 创建连接 $conn = oci_connect( $db_user, $db_pass, "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$db_host)(PORT=$db_port))(CONNECT_DATA=(SERVICE_NAME=$db_service)))" ); if (!$conn) { $e = oci_error(); die("连接失败: " . $e['message']); } else { echo "Oracle 数据库连接成功!"; } ?>2. 执行查询// 准备SQL语句 $sql = "SELECT employee_id, first_name, last_name FROM employees WHERE department_id = :dept_id"; // 创建语句句柄 $stmt = oci_parse($conn, $sql); // 绑定参数(防止SQL注入) $dept_id = 50; oci_bind_by_name($stmt, ":dept_id", $dept_id); // 执行查询 oci_execute($stmt); // 获取结果 echo "<table border='1'>"; echo "<tr><th>ID</th><th>名字</th><th>姓氏</th></tr>"; while ($row = oci_fetch_array($stmt, OCI_ASSOC+OCI_RETURN_NULLS)) { echo "<tr>"; echo "<td>" . $row['EMPLOYEE_ID'] . "</td>"; echo "<td>" . $row['FIRST_NAME'] . "</td>"; echo "<td>" . $row['LAST_NAME'] . "</td>"; echo "</tr>"; } echo "</table>"; // 释放资源 oci_free_statement($stmt);3. 插入数据$sql = "INSERT INTO employees (employee_id, first_name, last_name, email, hire_date, job_id) VALUES (employees_seq.nextval, :fname, :lname, :email, SYSDATE, :job_id)"; $stmt = oci_parse($conn, $sql); // 绑定参数 $fname = "张"; $lname = "三"; $email = "zhangsan@example.com"; $job_id = "IT_PROG"; oci_bind_by_name($stmt, ":fname", $fname); oci_bind_by_name($stmt, ":lname", $lname); oci_bind_by_name($stmt, ":email", $email); oci_bind_by_name($stmt, ":job_id", $job_id); // 执行并检查结果 if (oci_execute($stmt)) { echo "新记录插入成功!"; oci_commit($conn); // 提交事务 } else { $e = oci_error($stmt); echo "插入失败: " . $e['message']; } oci_free_statement($stmt);4. 更新数据$sql = "UPDATE employees SET salary = :salary WHERE employee_id = :emp_id"; $stmt = oci_parse($conn, $sql); $salary = 8000; $emp_id = 100; oci_bind_by_name($stmt, ":salary", $salary); oci_bind_by_name($stmt, ":emp_id", $emp_id); if (oci_execute($stmt)) { echo "记录更新成功!"; oci_commit($conn); } else { $e = oci_error($stmt); echo "更新失败: " . $e['message']; } oci_free_statement($stmt);5. 删除数据$sql = "DELETE FROM employees WHERE employee_id = :emp_id"; $stmt = oci_parse($conn, $sql); $emp_id = 207; oci_bind_by_name($stmt, ":emp_id", $emp_id); if (oci_execute($stmt)) { echo "记录删除成功!"; oci_commit($conn); } else { $e = oci_error($stmt); echo "删除失败: " . $e['message']; } oci_free_statement($stmt);6. 调用存储过程// 假设有存储过程: get_employee_name(emp_id IN NUMBER, emp_name OUT VARCHAR2) $sql = "BEGIN get_employee_name(:emp_id, :emp_name); END;"; $stmt = oci_parse($conn, $sql); $emp_id = 100; $emp_name = ""; // 用于接收输出 oci_bind_by_name($stmt, ":emp_id", $emp_id); oci_bind_by_name($stmt, ":emp_name", $emp_name, 100); // 100是缓冲区大小 oci_execute($stmt); echo "员工姓名: " . $emp_name; oci_free_statement($stmt);7. 事务处理// 关闭自动提交 oci_set_autocommit($conn, false); try { // 执行多个操作... $stmt1 = oci_parse($conn, "UPDATE accounts SET balance = balance - 100 WHERE id = 1"); oci_execute($stmt1); $stmt2 = oci_parse($conn, "UPDATE accounts SET balance = balance + 100 WHERE id = 2"); oci_execute($stmt2); // 提交事务 oci_commit($conn); echo "事务执行成功!"; } catch (Exception $e) { // 回滚事务 oci_rollback($conn); echo "事务失败: " . $e->getMessage(); } oci_free_statement($stmt1); oci_free_statement($stmt2);8. 错误处理最佳实践function execute_query($conn, $sql, $params = []) { $stmt = oci_parse($conn, $sql); if (!$stmt) { $e = oci_error($conn); throw new Exception("SQL解析失败: " . $e['message']); } // 绑定参数 foreach ($params as $key => $value) { oci_bind_by_name($stmt, $key, $params[$key]); } if (!oci_execute($stmt)) { $e = oci_error($stmt); throw new Exception("查询执行失败: " . $e['message']); } return $stmt; } // 使用示例 try { $stmt = execute_query($conn, "SELECT * FROM products WHERE category = :cat", [":cat" => "Electronics"] ); // 处理结果... } catch (Exception $e) { echo "错误: " . $e->getMessage(); }9. 关闭连接// 关闭连接 oci_close($conn);📌 重要注意事项:安全第一:始终使用 oci_bind_by_name() 防止SQL注入不要在代码中硬编码密码(使用环境变量或配置文件)最小权限原则:使用普通用户而非SYSTEM性能优化:// 设置预取行数(提高查询性能) oci_set_prefetch($stmt, 100); // 使用持久连接(高并发场景) $conn = oci_pconnect($user, $pass, $connection_string);数据类型处理:// 处理CLOB类型 $clob = oci_new_descriptor($conn, OCI_D_LOB); oci_bind_by_name($stmt, ":clob_data", $clob, -1, OCI_B_CLOB); // 处理日期 $date = date('d-M-Y'); oci_bind_by_name($stmt, ":hire_date", $date);替代连接方式(PDO):$dbh = new PDO("oci:dbname=//localhost:1521/ORCL;charset=UTF8", $user, $pass); $stmt = $dbh->prepare("SELECT * FROM employees WHERE id = :id"); $stmt->execute([':id' => 100]);这些示例覆盖了PHP操作Oracle数据库的常见场景,建议从简单查询开始练习,逐步掌握事务处理和存储过程调用等高级功能。
2025年07月24日
11 阅读
0 评论
0 点赞
2025-07-23
Oracle和MySQL语法区别
最近需要迁移项目,将数据库由Oracle改为MySQL。由于两者的语法有部分不一样,所以需要把Oracle中能用但MySQL中不能用的函数/类型等改为MySQL中能用的,以下是总结出的部分语法区别:一、数据类型Number类型MySQL中是没有Number类型的,但有int/decimal 类型,Oracle中的Number(5,1)对应MySQL中的decimal(5,1),Number(5) 对应 int(5)。MySQL中的数字型类型比较多,分的也比较细,还有tinyint、smallint、mediumint、bigint等类型Varchar2(n)类型MySQL中对应Oracle Varchar2(n)类型的替代类型是varchar(n)类型。Date 类型MySQL 中的日期时间类型有Date、Time、Datetime等类型,MySQL中Date类型仅表示日期(年-月-日),Time类型仅表示时间(时:分:秒),而Datetime类型表示日期时间(年-月-日 时:分:秒),Oracle中的Date类型和MySQL中的Datetime类型一致。二、函数length(str)函数Oracle中的length(str)是获取字符串长度的函数,MySQL 中对应的函数为char_length(str)。sys_guid()函数Oracle中可通过sys_guid()函数是生成随机序列,MySQL通过UUID()生成随机序列。时间格式化函数将时间转换为字符串型时间 MySQL date_format(NOW(),'%Y-%m-%d') 对应Oracle的 Oracle中的 to_char(sysdate, 'YYYY-MM-DD');将字符串型时间转换为时间类型 MySQL str_to_date('2019-01-01','%Y-%m-%d') 对应Oracle中的 to_date('2019-01-01', 'YYYY-MM-DD');包括时分秒的函数转换:DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'),str_to_date('2019-01-01','%Y-%m-%d %H:%i:%s')。条件函数(nvl()、nvl2()、decode())nvl(tab.columnName, 0):如果tab.columnName值为空,则返回值取0,否则取tab.columnName;对应的MySQL函数为:ifnull(tab.columnName, 0)。nvl2(expr1,expr2,expr3):如果expr1不为null,则返回expr2,否则返回expr3;对应的MySQL函数为:if(expr1,expr2,expr3)。DECODE(value, val1, val2, val3):如果value等于val1,则返回val2,否则返回val3;MySQL可用IF函数表示:if(value=val1, val2, val3);DECODE(value, if1, val1, if2,val2,...,ifn, valn, val):如果value等于if1,则返回val1,如果value等于if2,则返回value2...如果value等于ifn,则返回valn,否则返回val;MySQL对于这种判断可以通过case when then else end;l来判断,即:case when value=if1 then val1 when value=if2 then val2,,,when value=ifn then valn else val end;trunc()函数TRUNC(12.123):返回整数(12);MySQL对应的函数:truncate(12.123, 0);TRUNC(12.123, 2):返回值保留2为小数(12.12);MySQL对应的函数:truncate(12.123, 2);TRUNC(SYSDATE):返回值为(2019-07-26 00:00:00);MySQL对应的为cast(now() as datetime):返回值为(2019-07-26 14:11:38);MySQL的cast函数语法为:CAST(xxx AS 类型) (可用类型为:二进制,同带binary前缀的效果:BINARY;字符型,可带参数:CHAR();日期:DATE;时间:TIME;日期时间型: DATETIME;浮点数: DECIMAL;整数:SIGNED;无符号整数:UNSIGNED)to_char() to_number()to_char(123):将数字123转换为字符串123;MySQL对应的函数为CAST(123 AS CHAR(3));to_number('123'):将字符串数字123转换为数字类型;MySQL对应的函数为cast('123' as SIGNED);sysdate 当前时间sysdate:返回当前日期+时间; MySQL对应的函数为 now();三、其他引号MySQL可识别双引号和单引号,Oracle只能识别单引号。字符串连接符 ||Oracle 可用'||'来连接字符串,但MySQL不支持'||'连接,MySQL可通过concat()函数链接字符串。Oracle的 a.studentname||'【'||a.studentno||'】' 相当于 MySQL的 concat(a.studentname, '【', a.studentno, '】')ROWNUMOracle可通过rownum获取前n条记录,MySQL通过limit来获取前n条记录,但二者的写法略有不同,在Oracle中rownum作为where条件的一部分,而MySQL中limit不是where条件的一部分。-- rownum语法如下:SELECT * FROM XJ_STUDENT WHERE ROWNUM = 1; -- 查询第一条数据SELECT * FROM XJ_STUDENT WHERE ROWNUM <= 10; -- 获取前10条数据-- 但rownum不支持查询后几条或第n(n>1)条数据,例如以下sql是不支持的SELECT * FROM XJ_STUDENT WHERE ROWNUM > 2;SELECT * FROM XJ_STUDENT WHERE ROWNUM = 3;-- limit 语法如下:SELECT * from fw_department limit 3; -- 查询前3条数据SELECT * from fw_department limit 2, 4; -- 从第2(序号从0开始)条开始,查4条记录空数据排序(nulls first 和nulls last)-- null值排在最前SELECT * FROM FW_DEPARTMENT A ORDER BY A.REMARK DESC NULLS FIRST-- null值排在最后SELECT * FROM FW_DEPARTMENT A ORDER BY A.REMARK DESC NULLS LAST-- MySQL 可通过IF和ISNULL函数达到相同的效果-- null值排在最后select * from FW_DEPARTMENT A order by IF(ISNULL(A.REMARK),1,0),A.REMARK desc-- null值排在最前select * from FW_DEPARTMENT A order by IF(ISNULL(A.REMARK),0,1),A.REMARK desc表(左/右)关联(+)Oracle左连接,右连接可以使用(+)来实现. MySQL只能使用left join ,right join等关键字。-- Oracle 左关联select * from taba, tabb where taba.id = tabb.id(+);-- Oracle 右关联select * from taba, tabb where taba.id(+) = tabb.id;-- MySQL 左关联select * from taba left join tabb on taba.id=tabb.id;-- MySQL 右关联select * from taba right join tabb on taba.id=tabb.id;删除语法MySQL的删除语法没有Oracle那么随意,例如下面的sql在Oracle中可以执行,但在MySQL中就不可以。-- Oracle 可执行,但MySQL中不能执行DELETE FROM FW_DEPARTMENT A WHERE A.DEPID = '111';DELETE FW_DEPARTMENT WHERE DEPID = '111';-- MySQL中删除语句格式如下:DELETE FROM FW_DEPARTMENT WHERE DEPID = '111';递归查询(start with connect by prior)MySQL不支持(start with connect by prior)的这种递归查询,但可以通过自定义函数来实现。-- Oracle 递归查询 查询部门ID为‘1111’的所有子部门(包含自身)SELECT *FROM FW_DEPARTMENTSTART WITH DEPID='1111'CONNECT BY PRIOR DEPID = PARENTDEPID;-- Oracle 递归查询 查询部门ID为‘1111’的所有父部门(包含自身)SELECT *FROM FW_DEPARTMENTSTART WITH DEPID='1111'CONNECT BY PRIOR PARENTDEPID = DEPID;-- MySQL 先创建fun_getDepIDList函数,用于查询部门ID字符串CREATE FUNCTION fun_getDepIDList(rootId VARCHAR(32))RETURNS VARCHAR(6000)BEGINDECLARE pTemp VARCHAR(6000);DECLARE cTemp VARCHAR(6000);SET pTemp='$';SET cTemp=rootId;WHILE cTemp is not null DOset pTemp=CONCAT(pTemp,',',cTemp);SELECT GROUP_CONCAT(depid) INTO cTemp from fw_departmentWHERE FIND_IN_SET(PARENTDEPID,cTemp)>0;END WHILE;RETURN pTemp;END;-- 查询部门ID为‘1111’的所有子部门(包含自己)select * from fw_departmentwhere FIND_IN_SET(DEPID, fun_getDepIDList('1111'));-- 查询部门ID为‘1111’的所有父部门(包含自己)select * from fw_departmentwhere FIND_IN_SET('1111', fun_getDepIDList(DEPID));merge intoMySQL不支持(merge into),但提供的replace into 和on duplicate key update可实现相似的功能。-- Oracle merge into (有则修改,无则新增)MERGE INTO TMPDEPTAB AUSING (SELECT '1111' DEPID, '哈哈' DEPNAME FROM DUAL) BON (A.DEPID = B.DEPID)WHEN MATCHED THENUPDATE SET A.DEPNAME = B.DEPNAMEWHEN NOT MATCHED THENINSERT(DEPID, DEPNAME) VALUES(B.DEPID, B.DEPNAME);-- MySQL replace into (特点:1、先删后增; 2、插入/更新的表必须有主键或唯一索引;-- 3、未修改/新增的数据项,如果必填,则必须有默认值)-- 1、由于是先删后增,所以需要满足以下2个条件之一:-- 1.要么必填项有默认值;-- 2.要么插入/更新时为没有默认值的必填项赋值, 否则新增时会报错。-- 2、表中需要有主键或唯一索引,否则下面语句如果执行多次,表中会出现重复数据。replace into fw_department(DEPID,PARENTDEPID,DEPNO,DEPNAME)values('1111111', '1234','123', '哈哈');-- MySQL on duplicate key update (特点:1、插入/更新的表必须有主键或唯一索引;-- 2、未修改/新增的数据项,如果必填,则必须有默认值)insert into fw_department(depid,parentdepid,depno,depname)select '1111111' depid, '123' parentdepid, 'e12' depno, '哈哈哈哈' depnamefrom fw_departmenton duplicate keyupdate parentdepid = values(parentdepid),depno=values(depno),depname=values(depname);withOracle 中可用with来构建一个临时表,但MySQL不支持with,对应临时表,MySQL可通过小括号的方式来处理,但构建的临时表必须设置临时表名。-- Oracle with使用WITH TMPTAB AS (SELECT A.DEPID FROM FW_DEPARTMENT A)SELECT DEPIDFROM TMPTAB-- MySQL 构建临时表使用(此处必须给括号中的临时表设置表名)select b.depidfrom (select depidfrom fw_department) bhttps://blog.csdn.net/weixin_63021300/article/details/132267190?ops_request_misc=%257B%2522request%255Fid%2522%253A%252274a5a63189f4ae0093201ba847814e67%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=74a5a63189f4ae0093201ba847814e67&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2-132267190-null-null.142^v102^pc_search_result_base1&utm_term=oracle&spm=1018.2226.3001.4187
2025年07月23日
10 阅读
0 评论
0 点赞
2025-07-23
加分逻辑
1.重要关键字(required)匹配:·动力类型:用户输入提取到'FD',配置规格中包含'FD'(在"FD/FG/FLB20-25"中),因此匹配,加30分。·吨位:用户输入提取到20.配置规格中吨位范围是20-25(从"FD/FG/FLB20-25"解析得到),20在范围内,因此匹配,加30分。2.没有可选关键字,所以没有加分。3.其他元素匹配(加分项):配置规格被拆分为:["FD/FG/FLB20-25","国产品牌","充气(STD)"]遍历每个元素:·"FD/FG/FLB20-25": 这是一个复合描述,在用户输入中并没有完全出现。用户输入中只有'FD20T',所以不匹配。由于它不在CONFIG_VALUES. 其它中,所以按常规元素处理:未匹配,扣0. 1分。·"国产品牌": 在CONFIG_VALUES. 其它中。用户输入中没有“国产品牌”这个字符串,所以未匹配,扣10分。·"充气(STD)": 在CONFIG_VALUES. 其它中?注意,CONFIG_VALUES. 其它数组里包含了'充气(STD)'.用户输入中没有提到“充气(STD)”,所以未匹配,扣10分。4.特殊处理:因为当前系统是轮胎系统(在遍历轮胎系统时),并且用户输入中没有包含任何轮胎相关的关键词(比如“胎”),而配置规格中包含“充气(STD)”(这是默认轮胎配置),所以触发特殊加分:加60分。
2025年07月23日
18 阅读
0 评论
0 点赞
1
...
13
14
15
...
37
0:00