Php Oracle:是否存在于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

我有个小问题。 此PHP脚本自动在Oracle数据库中创建表

现在我想检查它是否可以在Oracle数据库中创建表 给予。如果是,则删除这些。 在mySQL中,这是通过if exists完成的

但就像在Oracle数据库中一样


$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之间的“往返”,从而有助于提高性能和可伸缩性。我把原来的问题理解为想要删除任何现有的表。