Repository: tobymao/sqlglot

Issue:
in ORACLE queries, SYSDATE is replaced by CURRENT_TIMESTAMP. These 2 functions are not the same.
SQLGlot version: 25.14.1.dev1

**Fully reproducible code snippet**
```python
import sqlglot
sql = sqlglot.parse_one(sql='SELECT SYSDATE', read='oracle')
print(sql.sql(dialect='oracle'))
```
--> SELECT CURRENT_TIMESTAMP

These 2 functions are not returning the same thing. And more important is they are not returning the same datatype. SYSDATE returns a date and therefore can be use for a date comparaison directly. It's not the case for CURRENT_TIMESTAMP.

**Official Documentation**
https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions191.htm
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm

Discussion:

Patch:
diff --git a/sqlglot/dialects/oracle.py b/sqlglot/dialects/oracle.py
index 3acabb94..2562422c 100644
--- a/sqlglot/dialects/oracle.py
+++ b/sqlglot/dialects/oracle.py
@@ -90,7 +90,6 @@ class Oracle(Dialect):
             "ORDER SIBLINGS BY": TokenType.ORDER_SIBLINGS_BY,
             "SAMPLE": TokenType.TABLE_SAMPLE,
             "START": TokenType.BEGIN,
-            "SYSDATE": TokenType.CURRENT_TIMESTAMP,
             "TOP": TokenType.TOP,
             "VARCHAR2": TokenType.VARCHAR,
         }
@@ -109,6 +108,11 @@ class Oracle(Dialect):
         }
         FUNCTIONS.pop("NVL")
 
+        NO_PAREN_FUNCTION_PARSERS = {
+            **parser.Parser.NO_PAREN_FUNCTION_PARSERS,
+            "SYSDATE": lambda self: self.expression(exp.CurrentTimestamp, sysdate=True),
+        }
+
         FUNCTION_PARSERS: t.Dict[str, t.Callable] = {
             **parser.Parser.FUNCTION_PARSERS,
             "JSON_ARRAY": lambda self: self._parse_json_array(
@@ -275,6 +279,9 @@ class Oracle(Dialect):
         }
 
         def currenttimestamp_sql(self, expression: exp.CurrentTimestamp) -> str:
+            if expression.args.get("sysdate"):
+                return "SYSDATE"
+
             this = expression.this
             return self.func("CURRENT_TIMESTAMP", this) if this else "CURRENT_TIMESTAMP"
 
diff --git a/sqlglot/dialects/redshift.py b/sqlglot/dialects/redshift.py
index 0b12df12..694af28a 100644
--- a/sqlglot/dialects/redshift.py
+++ b/sqlglot/dialects/redshift.py
@@ -80,7 +80,7 @@ class Redshift(Postgres):
         NO_PAREN_FUNCTION_PARSERS = {
             **Postgres.Parser.NO_PAREN_FUNCTION_PARSERS,
             "APPROXIMATE": lambda self: self._parse_approximate_count(),
-            "SYSDATE": lambda self: self.expression(exp.CurrentTimestamp, transaction=True),
+            "SYSDATE": lambda self: self.expression(exp.CurrentTimestamp, sysdate=True),
         }
 
         SUPPORTS_IMPLICIT_UNNEST = True
@@ -180,7 +180,7 @@ class Redshift(Postgres):
             exp.ApproxDistinct: lambda self,
             e: f"APPROXIMATE COUNT(DISTINCT {self.sql(e, 'this')})",
             exp.CurrentTimestamp: lambda self, e: (
-                "SYSDATE" if e.args.get("transaction") else "GETDATE()"
+                "SYSDATE" if e.args.get("sysdate") else "GETDATE()"
             ),
             exp.DateAdd: date_delta_sql("DATEADD"),
             exp.DateDiff: date_delta_sql("DATEDIFF"),
diff --git a/sqlglot/expressions.py b/sqlglot/expressions.py
index 404162d4..8a720486 100644
--- a/sqlglot/expressions.py
+++ b/sqlglot/expressions.py
@@ -5133,7 +5133,7 @@ class CurrentTime(Func):
 
 
 class CurrentTimestamp(Func):
-    arg_types = {"this": False, "transaction": False}
+    arg_types = {"this": False, "sysdate": False}
 
 
 class CurrentUser(Func):


Test patch:
diff --git a/tests/dialects/test_oracle.py b/tests/dialects/test_oracle.py
index 7f743d39..79b8a024 100644
--- a/tests/dialects/test_oracle.py
+++ b/tests/dialects/test_oracle.py
@@ -15,6 +15,7 @@ class TestOracle(Validator):
         )
         self.parse_one("ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol").assert_is(exp.Alter)
 
+        self.validate_identity("SYSDATE")
         self.validate_identity("CREATE GLOBAL TEMPORARY TABLE t AS SELECT * FROM orders")
         self.validate_identity("CREATE PRIVATE TEMPORARY TABLE t AS SELECT * FROM orders")
         self.validate_identity("REGEXP_REPLACE('source', 'search')")
@@ -72,10 +73,6 @@ class TestOracle(Validator):
             "SELECT JSON_OBJECTAGG(KEY department_name VALUE department_id) FROM dep WHERE id <= 30",
             "SELECT JSON_OBJECTAGG(department_name: department_id) FROM dep WHERE id <= 30",
         )
-        self.validate_identity(
-            "SYSDATE",
-            "CURRENT_TIMESTAMP",
-        )
         self.validate_identity(
             "SELECT last_name, department_id, salary, MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) "
             'OVER (PARTITION BY department_id) AS "Worst", MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) '