Php Oracle:是否存在于Oracle数据库中?
我有个小问题。 此PHP脚本自动在Oracle数据库中创建表 现在我想检查它是否可以在Oracle数据库中创建表 给予。如果是,则删除这些。 在mySQL中,这是通过if exists完成的 但就像在Oracle数据库中一样Php Oracle:是否存在于Oracle数据库中?,php,oracle,Php,Oracle,我有个小问题。 此PHP脚本自动在Oracle数据库中创建表 现在我想检查它是否可以在Oracle数据库中创建表 给予。如果是,则删除这些。 在mySQL中,这是通过if exists完成的 但就像在Oracle数据库中一样 $conn = null; include "../conn/oci_conn.php"; function dbConstructor($conn) { // IDM_CATEGORY $sql = 'CREATE TABLE
$conn = null;
include "../conn/oci_conn.php";
function dbConstructor($conn)
{
// IDM_CATEGORY
$sql = 'CREATE TABLE "IDM_CATEGORY"(
"CAT_HASH" VARCHAR2(10),
"CAT_ACTIVE" CHAR(1 BYTE),
"CAT_NAME_DE" VARCHAR2(100 BYTE),
"CAT_LOCATION" VARCHAR2(20 BYTE),
"CAT_NAME_EN" VARCHAR2(100 BYTE)
)';
oci_execute(oci_parse($conn, $sql)) or die(oci_error());
echo "- Table IDM_CATEGORY created successfully<br>";
// IDM_SUBMITTERS
$sql = 'CREATE TABLE "IDM_SUBMITTERS"(
"SU_PERSNUM" NUMBER(*,0),
"SU_IDHASH" VARCHAR2(20 BYTE),
"SU_PERCENT" FLOAT(126)
)';
oci_execute(oci_parse($conn, $sql)) or die(oci_error());
echo "- Table IDM_SUBMITTERS created successfully<br>";
}
dbConstructor($conn);
$conn = null;
Oracle在创建表时没有这样的构造,就好像不存在一样 相反,您必须检查表是否独立存在 这可以通过在表USER_表中查找记录来完成: 从用户\u表中选择count*,其中表\u名称='您的\u表\u名称' 您可以事先执行该选择:
<?php
...
$sql = 'select count(*) from USER_TABLES where TABLE_NAME = \'IDM_CATEGORY\'';
$stmt = oci_parse($conn, $sql) or die(oci_error());
oci_execute($stmt) or die(oci_error());
$row = oci_fetch_array($stmt, OCI_NUM);
oci_free_statement($stmt);
if (empty($row[0])) { // got zero
$sql = 'CREATE TABLE "IDM_CATEGORY"(
...
)';
oci_execute(oci_parse($conn, $sql)) or die(oci_error());
echo "- Table IDM_CATEGORY created successfully<br>"
} else {
echo "- Table IDM_CATEGORY already exists!<br>"
}
UPD
如果您想在重新创建之前删除确实存在的表,我不确定这是否是一个好的做法,因为该表可能包含一些有用的数据,您可以使用相同的方法,只需颠倒逻辑:仅当该表存在时才执行drop
或者,您可以执行一个更简单的pl/sql,它将使ORA-00942异常静音:
开始
立即执行“删除表格您的表格名称”;
例外
当其他人
如果SQLCODE-942,则-Mute only ORA-00942:表或视图不存在
提高;-重估他人
如果结束;
终止
Oracle在创建表时没有这样的构造,就好像不存在一样 相反,您必须检查表是否独立存在 这可以通过在表USER_表中查找记录来完成: 从用户\u表中选择count*,其中表\u名称='您的\u表\u名称' 您可以事先执行该选择:
<?php
...
$sql = 'select count(*) from USER_TABLES where TABLE_NAME = \'IDM_CATEGORY\'';
$stmt = oci_parse($conn, $sql) or die(oci_error());
oci_execute($stmt) or die(oci_error());
$row = oci_fetch_array($stmt, OCI_NUM);
oci_free_statement($stmt);
if (empty($row[0])) { // got zero
$sql = 'CREATE TABLE "IDM_CATEGORY"(
...
)';
oci_execute(oci_parse($conn, $sql)) or die(oci_error());
echo "- Table IDM_CATEGORY created successfully<br>"
} else {
echo "- Table IDM_CATEGORY already exists!<br>"
}
UPD
如果您想在重新创建之前删除确实存在的表,我不确定这是否是一个好的做法,因为该表可能包含一些有用的数据,您可以使用相同的方法,只需颠倒逻辑:仅当该表存在时才执行drop
或者,您可以执行一个更简单的pl/sql,它将使ORA-00942异常静音:
开始
立即执行“删除表格您的表格名称”;
例外
当其他人
如果SQLCODE-942,则-Mute only ORA-00942:表或视图不存在
提高;-重估他人
如果结束;
终止
嗯,我不明白这个问题。在您尝试创建oracle中的表之前,是否要查看该表是否已经存在?我不明白这个问题。在尝试创建表之前,您想看看oracle中是否已经存在表?PL/SQL解决方案很好,因为它减少了PHP和oracle DB之间的“往返”,从而有助于提高性能和可伸缩性。我把最初的问题理解为想要删除任何现有的表。PL/SQL解决方案很好,因为它减少了PHP和Oracle DB之间的“往返”,从而有助于提高性能和可伸缩性。我把原来的问题理解为想要删除任何现有的表。