oracle如何检查sql语法错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle如何检查sql语法错误相关的知识,希望对你有一定的参考价值。
MSSQL可以通过
set NOEXEC ON 或是set NOEXEC off 来检查sql语法错误,oracle有类似函数吗?
或者用DBMS_SQL.PARSE追问
可以在sql的where中拼上 and 1=2
这个检查查询语句可以,其他的必行了吧,要的是所有语句
DBMS_SQL.PARSE 怎么用的,能写个例子不?
谢啦
例
create or replace function test return varchar2 as
v_cursor number;
v_string varchar2(200);
v_row number;
begin
v_cursor:=dbms_sql.open_cursor;
--v_string:=\'update fnd_user a set a.description=\'\'fred\'\' where a.user_id=1055\';
v_string:=\'create table testdb (text varchar2(200))\';
dbms_sql.parse(v_cursor,v_string,dbms_sql.native);
v_row:=dbms_sql.execute(v_cursor);
dbms_sql.close_cursor(v_cursor);
return (\'成功执行\');
exception
when others then
dbms_sql.close_cursor(v_cursor);
return (\'执行失败!\'||sqlcode||sqlerrm);
raise;
end;
DBMS_SQL.PARSE 这个是执行动态的sql吧,mssql中也有类似的
想问下oracle中有类似mssql中的set NOEXEC ON 或是set NOEXEC off 来检查sql语法错误的方法吗?
这个貌似没有,我才疏学浅了
参考技术A Oracle请使用PL/SQL Developer软件调试SQL语句,该软件检查功能还是不错的!追问oracle有类似函数吗?
工具自然知道有,能用的还很多,要问的是有类似函数吗?
查错函数我没见过
我如何解决以下sql语法错误
【中文标题】我如何解决以下sql语法错误【英文标题】:How do i solve the following sql syntax error 【发布时间】:2020-12-19 19:14:39 【问题描述】:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ':Username, :passw, :addrss, :DOB, :emil, :ag)' 附近使用正确的语法
代码:
def submit():
my_cursor = mydb.cursor()
#INSERT INTO TABLE
my_cursor.execute("INSERT INTO madhav VALUES (:Username, :passw, :addrss, :DOB, :emil, :ag)",
'Username': Username.get(),
'passw' : passw.get(),
'addrss' : addrss.get(),
'DOB' : DOB.get(),
'emil' : emil.get(),
'ag' : ag.get()
)
mydb.commit()
mydb.close()
# Clear The Text Boxes
Username.delete(0,END)
passw.delete(0,END)
addrss.delete(0,END)
DOB.delete(0,END)
emil.delete(0,END)
ag.delete(0,END)
上述函数用于使用 GUI 将值插入数据库
【问题讨论】:
显示“CREATE TABLE”SQL 并解释从Username.get()
等返回的数据类型是什么。
...顺便说一句,您为什么要留下信件? passw
的输入并不比password
容易,而且后者更更清晰。 emil
与 email
同上。事实上,完整的单词可能更容易输入,因为它们是你可能有肌肉记忆的真实单词。清晰度很重要。在源代码的此处或此处保存一个字节没有任何好处。
my_cursor.execute("CREATE TABLE madhav (name VARCHAR(255), password VARCHAR(255), address VARCHAR(255), DT DATE, email VARCHAR(255), age INTEGER(10), user_id INTEGER AUTO_INCREMENT Primary key)") 这是创建表sql
【参考方案1】:
这不是您在 mydb 中使用命名参数的方式。这种参数的正确语法是%(name)s
。所以,在你的情况下:
my_cursor.execute("INSERT INTO madhav VALUES (%(Username)s, %(passw)s, %(addrss)s, %(DOB)s, %(emil)s, %(ag)s)",
'Username': Username.get(),
'passw' : passw.get(),
'addrss' : addrss.get(),
'DOB' : DOB.get(),
'emil' : emil.get(),
'ag' : ag.get()
)
【讨论】:
感谢您的代码,但弹出另一个错误说 mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '' 附近使用正确的语法......如果错误/怀疑是愚蠢的,我对此很抱歉 @tyzion 我错过了values
子句末尾的结尾)
,我深表歉意。已编辑和修复。
@Mureinik 为什么%
和s
..如果您可以在答案中添加它,它将帮助很多像我这样的路人.. 谢谢。
@AbhishekRai 正如我所指出的,这是 mydb 用于命名参数的语法。不太清楚如何进一步澄清这一点......
@Mureinik 好吧,您的这条评论将帮助路人。 :)【参考方案2】:
这些值采用变量类型,如字符串、整数等。 所以你的代码会变成
stmt= ( “INSERT INTO madhav(用户名、密码、地址、出生日期、emil、ag)” “值(%s、%s、%s、%s、%s、%s)” )
因为所有字段都是字符串类型,所以有 %s 否则对于整数它将是 %i 接下来,您可以将此 stmt 与要执行的数据绑定。
data = (Username.get(), passw.get(), addrss.get(), DOB.get(),emil.get(),ag.get()) my_cursor.execute(stmt, data)
查看这些文档了解更多信息 https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html
【讨论】:
以上是关于oracle如何检查sql语法错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Developer 中检查语法 Oracle 存储过程?
SQL 语法错误:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册
SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 对应的手册