SQL中$与{}的含义及$P{p_date}语法解析求助
SQL中$与{}的常见含义
$符号的不同场景用法
- Oracle:$可用于表、列等标识符的命名(比如
order$log);SQL*Plus里虽常用&做变量占位,但部分工具会用$替代;Oracle的SQLcl工具也支持用$处理变量。 - PostgreSQL:$主要用来定义「美元引号字符串」,比如
$$INSERT INTO user(name) VALUES('O''Neil')$$,能避免字符串内单引号转义的麻烦;Prepared Statement里会用$n(如$1)作为参数占位符。 - MySQL:原生SQL里$不是官方语法,但MyBatis这类ORM框架会把$作为参数替换标记。
{}符号的作用
基本都是框架或工具层面的语法,并非SQL原生支持:
- MyBatis:
${}是直接字符串替换,会把变量值原封不动拼进SQL(存在SQL注入风险,慎用);#{}是预编译占位符,会自动处理类型转换与特殊字符转义,安全性更高。 - 模板引擎(如Velocity、Freemarker):生成SQL模板时,用
${变量名}标记待替换位置,运行时替换为实际值。
关于$P{p_date}的具体解释
你看到的$P{p_date}不是Oracle原生语法,它是报表工具JasperReports(或配套iReport)专属的参数引用语法:
- 在JasperReports中,可预先定义参数(比如这里的
p_date,类型设为日期),然后在SQL里用$P{参数名}引用。报表运行时,工具会将该占位符替换为传入的具体日期值,再把完整SQL发送给Oracle执行。 - 实际运行示例:若传入的
p_date为'2024-05-20',最终送到Oracle的SQL会变为:
SELECT * FROM table_A A INNER JOIN table_B B ON (A.key = B.key AND A.date = '2024-05-20');
内容的提问来源于stack exchange,提问作者HO-N
相关产品推荐
相关产品推荐

