如何使用PDO从Oracle数据库更改NLS_DATE_FORMAT。 到目前为止,我有这个:
$date_set = "DD-MM-YYYY HH24:MI:SS";
$query = $this->conn->prepare("ALTER SESSION SET 'NLS_DATE_FORMAT' = ?");
$query->execute(array($date_set));
但是当我尝试获取会话时:
$query = "select * from nls_session_parameters where parameter='NLS_DATE_FORMAT'";
$parameters = array();
$test = $this->fetchRow($query, $parameters);
var_dump($test); exit();
它返回:
DD-MON-RR"
答案 0 :(得分:1)
此查询:
ALTER SESSION SET 'NLS_DATE_FORMAT' = 'DD-MM-YYYY HH24:MI:SS'
...应该触发此错误:
ORA-00922:缺少或无效选项
如果您无法检测到它,则错误检查代码中存在问题。最有可能的是,you haven't configured PDO to throw exceptions。
问题是NLS_DATE_FORMAT
不是字符串而是标识符:
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY HH24:MI:SS';
答案 1 :(得分:1)
在我的系统中,设置NLS_DATE_FORMAT没有任何效果,可能是因为我使用了oracle即时客户端。我的系统的解决方法是添加另一个alter session命令:
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY HH24:MI:SS';
ALTER SESSION SET NLS_DATE_LANGUAGE = 'AMERICAN';
当设置NLS_DATE_FORMAT且未设置NLS_DATE_LANGUAGE并恢复为DD-MON-RR格式时,似乎OCI驱动程序感到困惑。
答案 2 :(得分:0)
使用PHP / PDO / Oracle时,您可以使用:
//change settings below
$username='user';
$password='mypassword';
$dbname='databasename';
$hostname='localhost';
$port='1521';
$sid='XE'; //could also be ORCL
$charset='WE8ISO8859P1'; //or UTF8 or whatever charset
$oraclelangauge='AMERICAN';
$tns = "(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ".$hostname.")(PORT = ".$port."))
(CONNECT_DATA = (SID = ".$sid.")(SERVER = DEDICATED)))";
$dbDB = new PDO("oci:dbname=".$tns.";charset=".$charset, $username, $password);
$result = $dbDB->query("ALTER SESSION SET NLS_DATE_LANGUAGE = '".$oraclelanguage."'");
确保已启用 php_pdo_oci 扩展,并首先使用SQL Developer等其他Oracle客户端仔细检查Oracle连接设置。
首先检查ALTER SESSION SET NLS_DATE_LANGUAGE = <language>
是否有效,对于您在Oracle客户端中设置的 $ oraclelanguage 设置。